这些脚本有什么区别?
ALTER TABLE Post_Send WITH NOCHECK CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
答案 0 :(得分:1)
答案 1 :(得分:1)
ENABLE
启用约束。 (是的,它本应是WITH NOCHECK
。)WITH NOCHECK CHECK CONSTRAINT
不会检查现有数据。因此,令人困惑的语法FOREIGN KEY
可以在不检查现有数据的情况下启用约束。
来自the manual:
指定是否对表中的数据进行验证 新添加或重新启用的
CHECK
或WITH CHECK
约束。如果不 指定,WITH NOCHECK
用于新约束,WITH NOCHECK
假定重新启用约束。
由于您重新启用现有约束,WITH CHECK CHECK CONSTRAINT
是默认值,这两个语句完全相同。 {{1}}将重新启用约束,同时还检查现有数据是否存在违规(并将外键标记为流程中优化的可信任,如果绕过检查,则不会发生这种情况。)