0

我的数据流任务出错。

我有一个用于异步脚本组件的 ado.net 源。

问题出现在从脚本组件插入到它的目的地的最后

尝试将它自动放入表中的输出缓冲区的空行。

有没有办法防止这种情况发生/我如何操作输出缓冲区以便从中删除特定的行?

4

3 回答 3

1

您说源转到异步脚本组件。如果这是真的,那么您已经在控制行何时进入输出缓冲区。

默认情况下,脚本组件是同步的。每个输入行都有一个输出行。也许这就是您当前的设置。

如果要将脚本组件用作异步组件,则必须执行以下操作:

  • 添加新的脚本组件
  • 右键单击组件并选择显示高级编辑器...
  • 在 Input and Output Properties 上,选择 Output 项并将 SynchronousInputID 值更改为 None
  • 在“输出”选项卡上,添加将定义输出缓冲区的列。您必须定义列,因为与同步脚本不同,输出缓冲区不会自动定义为与输入缓冲区匹配。

编辑脚本时,可以使用 OutputBuffer.AddRow 方法在输出缓冲区中创建新行。每次调用 AddRow 时,现有的缓冲区内容都会从脚本组件中发送出去,并为下一行清除。使用跳过行的规则,您将在添加或跳过行之前验证输入缓冲区。

于 2011-05-02T14:14:01.877 回答
1

为了解决这个问题,我添加了条件拆分组件,并在其中一个空白列上添加了长度检查(即 len([testfield])>0)。然后,我将带有该检查的这些字段发送到数据库,并且对另一个分支没有做任何事情。

于 2012-05-04T17:08:13.473 回答
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();
       }
    }
}
于 2015-03-05T00:14:57.307 回答