2017-07-17 118 views
-1

这些脚本之间有什么区别?WITH NOCHECK CHECK CONSTRAINT和CHECK CONSTRAINT之间的区别

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

ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY]; 
GO 
+0

取决于表中是否已经有数据..但添加一个外键,并告诉它NOCHECK是毫无意义,而非愚蠢的IMO –

+0

他们显示相同的效果。 –

回答

0

CHECK CONSTRAINT使约束。 (是的,它应该是ENABLE,而不是WITH NOCHECK这样做,而不检查现有数据。所以混淆语法WITH NOCHECK CHECK CONSTRAINT启用约束而不检查现有数据。

the manual

指定该表中的数据是否或反对 新添加的或重新启用FOREIGN KEYCHECK约束没有验证。如果未指定 ,则假设新约束为WITH CHECK,假设重新启用约束为WITH NOCHECK

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