SqlBulkCopy如何环绕外键约束?

时间:2014-02-28 10:09:51

标签: sql-server foreign-keys sqlbulkcopy

我使用SqlBulkCopy将行集合插入表中。我忘了在行上设置一个整数值。缺少的列用于引用另一个表,并使用外键约束强制执行。

对于插入的每一行,最终整数值为零,零不识别相关表中的行。当我将值修改为有效值然后尝试将其切换回零时,它将不接受它。

所以我的问题是SqlBulkCopy如何设法让数据库处于无效状态?

2 个答案:

答案 0 :(得分:25)

  

SqlBulkCopy如何设法让数据库处于无效状态?

它会禁用您要插入的表上的外键。

是的,这是一个可怕的默认值。如果您能负担得起,请务必设置CHECK_CONSTRAINTS选项(或CheckConstraints SqlBulkCopy)。

默认情况下,它不会触发对数据一致性同样可怕的触发器。触发因素是有原因的。

答案 1 :(得分:6)

默认情况下,批量复制操作期间会忽略CHECK和FOREIGN KEY约束。 SqlBulkCopy是一个托管类,提供类似于SQL Server bcp命令提供的功能。 bcp命令具有 -h 提示,除非您提供 CHECK_CONSTRAINTS 提示,否则在批量加载期间将忽略CHECK和FOREIGN KEY约束。 technet文章指出 - http://technet.microsoft.com/en-us/library/ms162802.aspx

类似地,SqlBulkCopy类有一个接受SqlBulkCopyOptions枚举的构造函数。您必须设置 CheckConstraints 枚举选项以确保检查约束 - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

这篇文章讨论了约束检查控制 - http://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx

希望这有帮助。