从sql Server中的对象资源管理器中,选择并编写外键约束脚本时,将生成以下代码.
USE [MyTestDatabase] GO ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID]) REFERENCES [dbo].[T1] ([T1ID]) GO ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1] GO
最后一句“ALTER TABLE CHECK CONSTRAINT”的目的是什么?它是否运行似乎并不重要.它不会对现有的错误数据失败,也不会改变对新数据强制执行的约束.
谢谢!
解决方法
它确保在创建约束后启用约束.您的ALTER TABLE语句包含WITH NOCHECK,它表示在创建约束期间不检查现有的错误数据.
如上所述,由于第一个语句中的WITH NOCHECK,将不会根据约束检查现有数据.发出第二个语句将启用对约束所涵盖的表的任何未来更改的约束检查,直到发出ALTER TABLE [dbo].[T2] NOCHECK CONSTRAINT [FK_T2_T1]为止.
这些语句基本上都是在说“创建这个外键约束,但不要根据现有数据进行检查.对于任何即将发生的数据更改都要激活它.”