问题描述
输入缓冲区不包含“ DirectRowToOutput0”的定义,也不包含下面的其他属性。
Row.DirectRowToOutput0();
Row.ErrorMessage = ex.Message;
Row.DirectRowToFailedValidation();
我在SSIS软件包存储中有一些软件包,并尝试使用“软件包导入向导”项目将其导入。但是它存在一些问题,并且编译失败,并且完全破坏了以前的所有脚本组件,因此我从一些备份中提取了代码,并将其粘贴回了一些新的脚本任务中。
我确实将'ErrorMessage'添加到新的输出流和列中,但是看起来事情不再以这种方式工作。
新脚本任务似乎是C#2012。
我错过了什么?我一直在努力寻找应该使用的文档,而这些版本冲突确实很难解决。
使用SSDT 2017。
解决方法
“DirectRowToOutputX()”的意思是“支持过滤输出到命名输出组”。换句话说,如果您为输出过滤添加支持,那么您将获得上面列出的功能。方法如下:
在配置脚本组件时,您需要单击输入和输出,然后在输入和输出窗格中,选择要过滤的输出。然后在 Common Properties 中,选择 ExclusionGroup 并将其设置为非零值。现在返回并编辑您的脚本,Row.DirectRowToOutput0() 语句将起作用。下面的代码示例。
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
*/
}