在插入期间检测哪个数据集行违反了DB唯一约束

时间:2010-01-13 08:01:10

标签: sql sql-server constraints ssms

我正在从SQL Server Management Studio中的其他表中将行插入表中,并且某些记录违反了唯一约束,因为初始数据是“脏”且不一致。

如何查找违反哪些记录?

3 个答案:

答案 0 :(得分:0)

不幸的是,您唯一的解决方案是使用针对源数据的查询来验证约束以找到罪魁祸首。如果您使用SSIS之类的东西,可以将其配置为跳过违反约束的行。

答案 1 :(得分:0)

确定密钥是什么,并尝试以下方法之一:

1)数据已经存在:

从sourcetable中选择sourcekeyfield where存在(select * from desttable,其中destkeyfield = sourcekeyfield)

2)来源重复:

选择sourcekeyfield,从sourcetable group计算()按sourcekeyfield计数()> 1

答案 2 :(得分:0)

检查此链接:

DataSet hell - "Failed to enable constraints. One or more rows contain values...."

Sanjay Sheth 表示:

  

解决方案在于DataTable类的GetErrors方法:   http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataDataTableClassGetErrorsTopic.asp

     

基本上,当我看到上面的消息时,我会检查HasErrors   数据集中每个DataTable的属性然后调用   报告错误的表上的GetErrors方法。 GetErrors返回   DataRows的集合,您可以调用.RowError属性   每个错误的行找出恰好是什么   问题是。

并补充说:

  

...在填充之前关闭.EnableConstraints。我通常启用   只有在原始填充完成后才会再次出现约束。然后,   您可以捕获上面的异常并启动错误检测   完成我上面描述的功能。