我收到“违反UNIQUE KEY约束'AK_User'。当尝试使用SSIS将数据从excel文件复制到sql db时,无法在对象'dbo.tblUsers中插入重复键。
是否有任何方法可以忽略此错误,让包继续下一条记录而不停止?
我需要的是,如果它插入三条记录但是第一条记录是重复的,而不是失败,它应该继续其他记录并插入它们。
答案 0 :(得分:1)
有一个名为propagate
的系统变量,可用于继续或停止程序包的执行。
1.为失败的任务创建一个ON-Error
事件处理程序。通常,它是为整个Data Flow Task
创建的。
2.按F4
获取所有变量列表,然后点击顶部的图标
显示System Variable
。默认情况下Propagate
变量为True,您需要将其更改为false,这基本上意味着SSIS不会将错误传播到其他组件并让执行继续
Update 1:
要跳过坏行,基本上有两种方法: -
1.使用查找
尝试匹配源和目标中的primary key column values
,然后使用Lookup No Match Output
到destination
。如果值与目标不匹配,则插入其他行只是跳过行或使用Lookup Match Output
实施例
有关查阅的详细信息,请参阅this文章
2.
或者您可以将错误行重定向到平面文件或表。每个SSIS数据流组件都有一个错误输出。
例如,对于派生组件,错误输出对话框是
但是这种情况可能对你的情况没有帮助,因为目标中的重定向错误行无法正常工作。如果发生错误,它会重定向整个数据而不在目标中插入任何行。我认为这是因为OLEDB目的地执行bulk insert
或使用transactions
插入数据。请尝试使用lookup
来实现您的功能。