0

在 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因为第一部分被初始化而第二部分是当前值)

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

4

1 回答 1

1

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

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

您需要确保您具有对 OutputBuffer0 列的读/写访问权限。我不记得异步组件上的默认值是什么 - 可能只是写。

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

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

于 2018-04-19T17:07:23.837 回答