SSIS 脚本组件 - 获取数据流中的原始行数据

SSIS Script Component - get raw row data in data flow

我正在 SSIS 中处理一个平面文件,其中一个要求是如果给定行包含不正确数量的分隔符,则使该行失败但继续处理该文件。

我的计划是将行加载到 SQL 服务器中的单个列中,但在加载期间,我想在数据流期间测试每一行以查看它是否具有正确的行数分隔符,并添加一个派生列值来存储该比较的结果。

我想我可以用脚本任务组件来做到这一点,但我想知道以前是否有人这样做过,最好的方法是什么?如果脚本任务组件是可行的方法,我如何在脚本任务中访问原始行及其分隔符?

解决方案:

我最终使用了 Holder 答案的修改版本,因为我发现 TOKENCOUNT() 不会根据此 SO answer 计算空值。当两个定界符没有被值分隔时,会导致计数不正确(至少对我来说是这样)。

我改用了以下表达式:

LEN(EntireRow) - LEN(REPLACE(EntireRow, "|", ""))

无论给定字段中是否有值,这都会导致行中的分隔符计数正确。

我的建议是使用 Derrived Column 进行测试

然后添加一个条件拆分来决定是否要插入行。

像这样:

使用派生列框中的 TokenCount 函数获取列数,如下所示:TOKENCOUNT(EntireRow,"|")