【问题标题】:SSIS Script Component won't allow text Stream OutputSSIS 脚本组件不允许文本流输出
【发布时间】:2018-10-22 08:33:20
【问题描述】:

我正在尝试使用 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;
}

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

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

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

【问题讨论】:

  • 您可能正在寻找 SSIS 的 ImportColumn 功能 如果不清楚,请告诉我,自从我重新讨论该主题已经有一段时间了
  • 我相信我找到了解决方案,但它仍然无法正常工作。我可以将 JSON 数据分配给变量,因为它可以容纳 4000 多个字符。我唯一的问题是在帖子中执行它直到导入第一行后才分配变量,导致 json 数据和文件名信息不匹配。

标签: c# sql-server ssis


【解决方案1】:

有点晚了,但对于寻找此问题答案的其他人来说可能仍然相关。

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

MainBuffer.AddRow();
MainBuffer.Id = item.Id;
MainBuffer.LargeCol.AddBlobData(Encoding.UTF8.GetBytes(item.JsonData));

【讨论】:

  • 什么是 MainBuffer?这个问题使用了 Output0Buffer 并且没有引用“项目”,所以我很困惑试图将问题与答案相匹配。
  • @thursdaysgeek,与问题中的Output0Buffer 相同;我刚刚从我的代码中复制了这段代码,并在其中重命名了它(虽然我不记得如何)。
  • 我正在尝试在 ssis 2012 中执行此操作,但遇到错误:您的答案似乎是我需要的,但我无法编译。你能看看stackoverflow.com/questions/57381226/…吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多