【发布时间】:2017-06-06 14:02:13
【问题描述】:
我的 SSIS 包读取一个小的 .txt 文件并加载到一个表中。到目前为止没有问题。
但是,有时这个包会因为 PK 问题而失败,这是可以理解的(重复在源表中)。
我想让好的数据继续流入表格,并将重复的数据重定向到不同的表格以供进一步调查。
我的想法是简单地将红色/平面文件源错误输出路由到新的 OLEDB 目标/表,并将源错误输出更改为 Error = Redirect Row。
但是,我继续收到错误:违反 PRIMARY KEY 约束。
【问题讨论】:
-
使用目标的错误输出,而不是平面文件源的错误输出。
-
为什么不在写入表之前添加查找?然后可以将匹配的记录重定向到您的另一个表。不匹配的记录(即错误重定向)转到现有表
-
@JeroenMostert 这似乎将我的所有数据(700 奇行)发送到错误表。似乎没有一个到达有效的表。
-
是的,因为整个插入(批处理)在违反约束时失败。如果您需要过滤单个行,请将批量大小降低到单个插入(但这将非常低效)或遵循 Miguel 提出的策略进行查找并仅插入已知不存在的行(但请注意,这不是原子的,所以如果其他进程正在插入,这仍然会导致重复),或者将整个文件批量复制到表中并执行 T-SQL
INSERT ... WHERE NOT EXISTS/MERGE(SSIS 并不总是最方便的工具)。
标签: sql-server ssis