SSIS 脚本组件不允许文本流输出

Ala*_*ear 2 c# sql-server ssis

我正在尝试使用 SSIS 将 JSON 文件导入我的数据库。由于我在 SQL Server 2016 上,我可以将文件放在一行中并使用 OPENJSON 读取它们。

我的问题是不想只引入 JSON 文本。我还需要从文件名和当前目录中获取一些信息。

我的脚本组件如下所示:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string type = "NA";
    string ChassisSN = "NA";
    string CartridgeSN = "NA";

    string filepath = Variables.File;
    string filename = Path.GetFileNameWithoutExtension(filepath);
    string filenamefull = Path.GetFileName(filepath);
    string Parent = new DirectoryInfo(Path.GetDirectoryName(filepath)).Name;
    Char splitDelim = '_';
    String[] FileNameSplit = filename.Split(splitDelim);
    String[] ParentSplit = Parent.Split(splitDelim);
    CartridgeSN = FileNameSplit[2];
    ChassisSN = ParentSplit[2];
    type = FileNameSplit[3];

    if (ChassisSN != oldChassisSN)
    {
        oldChassisSN = ChassisSN;
    }

    Output0Buffer.AddRow();
    Output0Buffer.Filename = filenamefull.Trim();
    Output0Buffer.ChassisSN = ChassisSN.Trim();
    Output0Buffer.CartridgeSN = CartridgeSN.Trim();
    Output0Buffer.Type = type.Trim();
    Output0Buffer.JSON = Row.Column0.ToString;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是当我尝试将 JSON 数据放回新列时,它说它是只读的,因为我选择了文本流数据类型。由于文件很大,字符很可能超过 4000。

我还尝试将平面文件源和脚本作为源并合并数据,但不断出现在不同的行上。

它循环的每个文件只产生一行数据,可以在我的代码中看到。那么我怎样才能在一行中获得我需要的所有信息呢?

Rog*_*olf 5

有点晚了,但可能仍然与其他人寻找这个问题的答案相关。

将输出列定义为 时DT_(N)TEXT,它会从值类型变为BlobColumn对象,并且不能直接为其赋值。相反,该AddBlobData()方法应该用于提供一个值:

MainBuffer.AddRow();
MainBuffer.Id = item.Id;
MainBuffer.LargeCol.AddBlobData(Encoding.UTF8.GetBytes(item.JsonData));
Run Code Online (Sandbox Code Playgroud)