SSIS异步转换保留先前的列值并设置为下一行

时间:2018-04-19 16:57:09

标签: c# asynchronous ssis transformation script-component

在SSIS中使用异步转换时遇到问题。对于简化问题,我可以说我只有两个输出," Name"和" Id"。

我的C#代码是:

string name = "";
string Id = "";

if(...)   // read the first line to get Name and partial value of "Id"
{
Output0Buffer.AddRow();

Output0Buffer.Name = Row.Name.Trim();

Id = Row.Id.Trim();

}

else if(...)   //read the 2nd line to get the rest part of "Id"
{
  Output0Buffer.Id = Id + Row.Id.Trim();
}

理想情况下,当两个输出填充Output0Buffer时," Name"和" Id"将输出,但问题是,当第二行被读入缓冲区时,它再次初始化String Id,因此连接Output0Buffer.Id = Id + Row.Id.Trim();不起作用。 (它的工作方式与"" + rest part of the Id类似,因为第一部分初始化,第二部分是当前值)

此刻我想坚持使用脚本组件转换,有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

@Brad是正确的思路,但是您需要将Id的声明移动到类级成员而不是... SendOutputBuffer或其他任何名称。

如果您的if语句,那么您需要测试Name是否与班级成员名称匹配。

您需要确保您对OutputBuffer0列具有读/写访问权限。我无法回想起异步组件的默认设置 - 可能只是写。

大图片,您将所有值(ID)连接成一个大字符串并将其与键(名称)相关联,是吗?

哦,为了性能,通过将Id声明为StringBuilder并在将其分配给输出缓冲区时仅转换为String,可能会更好地服务