Sql server SqlBulkCopy如何绕过外键约束?

Sql server SqlBulkCopy如何绕过外键约束?,sql-server,foreign-keys,sqlbulkcopy,Sql Server,Foreign Keys,Sqlbulkcopy,我使用SqlBulkCopy将行集合插入表中。我忘了在行上设置一个整数值。缺少的列用于引用另一个表,这是通过外键约束强制执行的 对于插入的每一行,最后的整数值为零,并且零没有标识相关表中的一行。当我将该值修改为有效值,然后尝试将其切换回零时,它不会接受该值 因此,我的问题是SqlBulkCopy如何使数据库保持无效状态?默认情况下,在大容量复制操作期间,会忽略检查和外键约束。SqlBulkCopy是一个托管类,提供与SQL Server bcp命令类似的功能。bcp命令有一个-h提示,除非您提供

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

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


因此,我的问题是SqlBulkCopy如何使数据库保持无效状态?

默认情况下,在大容量复制操作期间,会忽略检查和外键约束。SqlBulkCopy是一个托管类,提供与SQL Server bcp命令类似的功能。bcp命令有一个-h提示,除非您提供检查约束提示,否则在批量加载过程中,检查和外键约束将被忽略。technet文章指出——

类似地,SqlBulkCopy类有一个接受SqlBulkCopyOptions枚举的构造函数。您必须设置CheckConstraints枚举选项以确保选中约束-

下面是一篇关于约束检查控制的文章-

希望这有帮助

SqlBulkCopy如何使数据库保持无效状态

它将禁用要插入的表上的外键

是的,这是一个可怕的违约。如果您负担得起,请确保设置选项
CHECK_CONSTRAINTS
(或
CheckConstraints
用于
SqlBulkCopy


默认情况下,它也不会触发触发器,这对数据一致性同样糟糕。触发器存在是有原因的。

但当它重新打开外键时,为什么不在该点引发异常?它不会打开它们。在SQL Server中,外键可以处于永久的
禁用状态。从现在开始,你的FK什么都不做,直到你手动采取行动。我没有手动重新打开FK,但它阻止我添加与之相矛盾的新值。在大容量插入之后,FK又开始工作了。好的,对。FK有两个独立的禁用状态:禁用和不受信任。两者都在元数据视图中可见。不受信任意味着可能存在无效行,并且引擎不使用FK的属性进行查询优化。您可能感兴趣的是查看SqlBulkCopy发送的语句。运行SQL Profiler。我注意到这个问题,我想知道使用Azure SQL 2017是否仍然如此?!