我收到“违反 UNIQUE KEY 约束 'AK_User'。尝试使用 SSIS 将数据从 excel 文件复制到 sql db 时,无法在对象 'dbo.tblUsers 中插入重复键。
有什么办法可以忽略这个错误,让包继续下一条记录不停止?
我需要的是,如果它插入三条记录但第一条记录是重复的,而不是失败,它应该继续其他记录并插入它们。
我收到“违反 UNIQUE KEY 约束 'AK_User'。尝试使用 SSIS 将数据从 excel 文件复制到 sql db 时,无法在对象 'dbo.tblUsers 中插入重复键。
有什么办法可以忽略这个错误,让包继续下一条记录不停止?
我需要的是,如果它插入三条记录但第一条记录是重复的,而不是失败,它应该继续其他记录并插入它们。
有一个名为的系统变量propagate
可用于继续或停止 package 的执行。
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
例子
有关查找的更多详细信息,请参阅本文
2.
或者您可以将错误行重定向到平面文件或表格。每个 SSIS 数据流组件都有一个错误输出。例如对于派生组件,错误输出对话框是
但是在您的情况下,这种情况可能对您没有帮助,因为目标中的重定向错误行无法正常工作。如果发生错误,它会重定向整个数据而不在目标中插入任何行。我认为这是因为 OLEDB 目标执行bulk insert
或插入数据使用transactions
。所以尝试使用lookup
来实现你的功能。