使用无检查检查约束和检查约束之间的区别



这些脚本之间有什么区别?

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

CHECK CONSTRAINT启用约束。(是的,它应该被ENABLEWITH NOCHECK这样做时不会检查现有数据。因此,令人困惑的语法WITH NOCHECK CHECK CONSTRAINT在不检查现有数据的情况下启用约束。

从手册:

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

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

最新更新