BIDS - SSIS - 重定向行错误发送太多行

时间:2011-03-02 20:08:00

标签: sql-server-2008 ssis

我有一个简单的数据流。 源是一个小的平面文件,里面有大约16k行。 目标是OLE DB目标,SQL 2008表上有3部分唯一键。 数据流通过一些简单的转换;行计数,派生列,数据转换等。

一切都很简单,一切正常。

我的问题是,在这个数据中,有2行在主键方面是重复的,2个重复的行违反了该键,所以总共有4行。在OLE DB目标上,我已将错误输出设置为重定向行,并将行发送到Error表,该表具有足够的列以供我识别坏行。

问题是即使有4个cuplrits,转换仍然会将1268行写入错误表。

有什么想法吗?

感谢。

**

只是添加,如果我删除2个重复行,整个文件导入成功.... 16,875行。 毫无疑问,只有2行违反了密钥,但错误重定向会影响1268。

**

3 个答案:

答案 0 :(得分:12)

我找到了解决方案。

如果使用OLE目标中的数据访问模式“表格或视图”而不是“表格或视图 - 快速加载”加载数据,问题就会消失。

我能找到的唯一相关评论是在MSDN上;

目标处的任何约束失败都会导致FastLoadMaxInsertCommitSize定义的整批行失败。

因此,在我的情况下,行大小似乎是1268,并且违反该键的2个重复行导致整个批处理被重定向到错误目标表。

答案 1 :(得分:0)

您确定其他行是否因PK违规而出错?通过错误路径可以使用几个附加列(ErrorCode,ErrorColumn)。这可能表明您有不同的问题。

答案 2 :(得分:0)

在SQL 2008中,您可以将失败的行重定向到例如平面文件目的地。转到目标OLEDB任务转到错误输出(选择窗口中的所有字段)。使用下面的组合框选择重定向行并应用,然后确定。 接下来,将OLEDB的预处理约束(红色箭头)拖到新的Flat文件任务并配置此任务(不要更改列的默认映射)。

现在您应该能够更轻松地找到错误行。

埃里克