在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
类似,因为第一部分初始化,第二部分是当前值)
此刻我想坚持使用脚本组件转换,有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
@Brad是正确的思路,但是您需要将Id的声明移动到类级成员而不是... SendOutputBuffer或其他任何名称。
如果您的if语句,那么您需要测试Name是否与班级成员名称匹配。
您需要确保您对OutputBuffer0列具有读/写访问权限。我无法回想起异步组件的默认设置 - 可能只是写。
大图片,您将所有值(ID)连接成一个大字符串并将其与键(名称)相关联,是吗?
哦,为了性能,通过将Id声明为StringBuilder并在将其分配给输出缓冲区时仅转换为String,可能会更好地服务