我使用SqlBulkCopy将行集合插入表中。我忘了在行上设置一个整数值。缺少的列用于引用另一个表,并使用外键约束强制执行。
对于插入的每一行,最终整数值为零,零不识别相关表中的行。当我将值修改为有效值然后尝试将其切换回零时,它将不接受它。
所以我的问题是SqlBulkCopy如何设法让数据库处于无效状态?
答案 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
希望这有帮助。