通过SSMS为现有外键约束生成Create DB脚本时,我们可以看到两组alter语句。一个用NOCHECK ADD另一个用CHECK。
ALTER TABLE [dbo].[claim] WITH NOCHECK ADD CONSTRAINT [FK_CLAIM_COPCID]
FOREIGN KEY([copcid])
REFERENCES [dbo].[copc] ([CopcId])
GO
ALTER TABLE [dbo].[claim] CHECK CONSTRAINT [FK_CLAIM_COPCID]
GO
为什么我们要获得两组脚本来创建新的约束?。
答案 0 :(得分:4)
第一个alter语句是创建约束并指示添加约束而不检查现有行是否服从新约束。
在没有先检查行的情况下添加约束时,在启用它之前它不会完全处于活动状态。这就是第二个语句所做的,它启用了新的约束。如果存在违反约束的行,则无法启用它。