2017-06-09 52 views
0

通過SSMS爲現有外鍵約束生成創建DB腳本時,我們可以看到兩組alter語句。一個使用NOCHECK ADD,另一個使用CHECK。通過SSMS爲現有外鍵生成創建腳本

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

第二個腳本不會創建約束,它實際上只是檢查它。 https://dba.stackexchange.com/questions/24297/alter-table-check-constraint –

回答

4

第一個alter語句是創建一個約束並指示添加約束而不檢查現有的行是否服從新的約束。

當您在未檢查行的情況下添加約束時,在啓用它之前它不會完全激活。這就是第二種說法所做的,它使新的約束成爲可能。如果有行破壞約束,則將無法啓用它。