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

标签 sql-server ssis ssis-2012 sql-server-2017

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

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

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

解决方案:

我最终选择了 Holder 答案的修改版本,因为我发现 TOKENCOUNT() 不会根据此 SO answer 计算空值。 。当两个分隔符没有用值分隔时,将导致计数不正确(至少对于我的目的而言)。

我使用了以下表达式:

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

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

最佳答案

我的建议是使用派生列来进行测试

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

类似这样的事情:

Dataflow

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

Derrived column

关于sql-server - SSIS 脚本组件 - 获取数据流中的原始行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56646821/

相关文章:

sql - 无法按日期时间排序设置行号

python - 使用 Python (Anaconda) 连接到 SQL Server Analysis Cube

ssis - 如何使用 ssis 实现以下查询

sql - 在 SSIS 导出包中,如何重命名带有时间戳的目标 excel 文件?

sql-server - 忽略 SSIS 的 OLE DB 目标中的重复记录

sql - 在 SQL Server 中查找和扫描

sql-server - SQL Server text、ntext、image 数据类型问题

c# - 部署自定义 SSIS 2012 组件

c# - SSIS 脚本任务找不到 Newtonsoft.Json

ssis-2012 - 如何将自定义消息记录到 SSIS 2012 中的执行报告