【问题标题】:Difference between WITH NOCHECK CHECK CONSTRAINT and CHECK CONSTRAINTWITH NOCHECK CHECK CONSTRAINT 和 CHECK CONSTRAINT 的区别
【发布时间】:2017-07-17 09:15:39
【问题描述】:

这些脚本有什么区别?

ALTER TABLE Post_Send WITH NOCHECK CHECK CONSTRAINT [My_FOREIGN_KEY];  
GO

ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY];
GO

【问题讨论】:

  • 它们的效果是一样的。

标签: sql-server tsql sql-server-2014


【解决方案1】:

CHECK CONSTRAINT 启用约束。 (是的,它应该是ENABLE。)WITH NOCHECK 这样做而不检查现有数据。因此,令人困惑的语法 WITH NOCHECK CHECK CONSTRAINT 无需检查现有数据即可启用约束。

来自the manual

指定表中的数据是否经过验证 新添加或重新启用的 FOREIGN KEYCHECK 约束。如果不 指定,WITH CHECK 被假定为新约束,WITH NOCHECK 假定为重新启用的约束。

由于您要重新启用现有约束,WITH NOCHECK 是默认值,这两个语句的作用完全相同。 WITH CHECK CHECK CONSTRAINT 将重新启用约束,同时检查现有数据是否存在违规(并将外键标记为受信任以在流程中进行优化,如果绕过检查则不会发生这种情况)。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2010-10-06
    • 2022-12-04
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多