通过SSMS为

时间:2017-06-09 12:59:06

标签: sql sql-server sql-server-2008 sql-server-2012

通过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

为什么我们要获得两组脚本来创建新的约束?。

1 个答案:

答案 0 :(得分:4)

第一个alter语句是创建约束并指示添加约束而不检查现有行是否服从新约束。

在没有先检查行的情况下添加约束时,在启用它之前它不会完全处于活动状态。这就是第二个语句所做的,它启用了新的约束。如果存在违反约束的行,则无法启用它。