SSIS编译问题-DirectRowToOutput

问题描述

输入缓冲区不包含“ DirectRowToOutput0”的定义,也不包含下面的其他属性

Row.DirectRowToOutput0();
Row.ErrorMessage = ex.Message;
Row.DirectRowToFailedValidation();

我在SSIS软件包存储中有一些软件包,并尝试使用“软件包导入向导”项目将其导入。但是它存在一些问题,并且编译失败,并且完全破坏了以前的所有脚本组件,因此我从一些备份中提取代码,并将其粘贴回了一些新的脚本任务中。

我确实将'ErrorMessage'添加到新的输出流和列中,但是看起来事情不再以这种方式工作。

新脚本任务似乎是C#2012。

我错过了什么?我一直在努力寻找应该使用的文档,而这些版本冲突确实很难解决

使用SSDT 2017。

解决方法

“DirectRowToOutputX()”的意思是“支持过滤输出到命名输出组”。换句话说,如果您为输出过滤添加支持,那么您将获得上面列出的功能。方法如下:

在配置脚本组件时,您需要单击输入和输出,然后在输入和输出窗格中,选择要过滤的输出。然后在 Common Properties 中,选择 ExclusionGroup 并将其设置为非零值。现在返回并编辑您的脚本,Row.DirectRowToOutput0() 语句将起作用。下面的代码示例。

enter image description here

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    bool keepThisRow = ValidateMyRow(Row);

    if (keepThisRow)
    {
        // Get/set Row values,do something useful

        Row.DirectRowToOutput0(); // for Output0
    }
    /* Else do nothing - the row will be filtered OUT of the output if not explicitly
     * included
    */
}