WITH NOCHECK CHECK CONSTRAINT和CHECK CONSTRAINT之间的区别

时间:2017-07-17 09:15:39

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

这些脚本有什么区别?

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

ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY];
GO

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

ENABLE启用约束。 (是的,它本应是WITH NOCHECK。)WITH NOCHECK CHECK CONSTRAINT不会检查现有数据。因此,令人困惑的语法FOREIGN KEY可以在不检查现有数据的情况下启用约束。

来自the manual

  

指定是否对表中的数据进行验证   新添加或重新启用的CHECKWITH CHECK约束。如果不   指定,WITH NOCHECK用于新约束,WITH NOCHECK   假定重新启用约束。

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