我在数据流任务上有错误。
我有一个ado.net源代码转到异步脚本组件。
问题出现在从脚本组件插入到目标所在的最后端
尝试将空行自动放入我表中的输出缓冲区。
有没有办法防止这种情况发生/如何操作输出缓冲区以便我可以从中删除特定的行?
答案 0 :(得分:1)
您说源是转到异步脚本组件。如果这是真的,那么你已经在控制行何时进入输出缓冲区。
默认情况下,脚本组件是同步的。每个输入行都有一个输出行。也许这就是你目前的设置。
如果要将脚本组件用作异步组件,则必须执行以下操作:
编辑脚本时,可以使用OutputBuffer.AddRow方法在输出缓冲区中创建新行。每次调用AddRow时,现有的缓冲区内容都会从脚本组件发出,并清除下一行。使用规则跳过行,您将在添加或跳过行之前验证输入缓冲区。
答案 1 :(得分:1)
为了解决这个问题,我添加了条件分割组件,并在其中一个空白列上添加了长度检查(即len([testfield])> 0)。然后我将带有该检查的字段发送到数据库,并且没有为其他分支做任何事情。
答案 2 :(得分:0)
问题似乎是SSIS在PreExecute期间执行AddRow()函数。这会在您的public override void ProcessInputRow()
函数中与AddRow()的任何使用发生冲突。例如PreExecute创建一个新行来启动,然后手动创建一个新行作为处理的一部分,你现在有2个新行,第一行充满了NULLS并已经传递给outputbuffer。要解决此问题,我会覆盖CreateNewOutputRows()
并将其留空,而不是仅根据需要添加行,例如如果正确的数据没有显示在输入缓冲区上,我的一些异步脚本根本不会向输出缓冲区添加一行。
public class ScriptMain : UserComponent {
public override void CreateNewOutputRows() {}
public override void Input_ProcessInputRow(InputBuffer Row) {
if(asNeeded) {
OutputBuffer.AddRow();
}
}
}