2010-11-15 18 views
3

當我用鼠標右鍵單擊默認約束的語法,我問SQL Server來爲它創建一個創建腳本,它會生成以下代碼:請解釋SQLServer的用於創建檢查約束

ALTER TABLE [dbo].[tblEventTurnJudgeStartValues] WITH NOCHECK ADD CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle] CHECK (([ExecutionToggle]=(1) OR [ExecutionToggle]=(0) OR [ExecutionToggle]=(-1))) 
GO 
ALTER TABLE [dbo].[tblEventTurnJudgeStartValues] CHECK CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle] 

對於記錄中,我理解第一個ALTER語句,但我不明白第二個alter語句的作用。試圖谷歌「CHECK CONSTRAINT」的短語,但只獲得點擊添加約束語法。

謝謝。

賽斯

更新
喬感謝您的回答。找到這個鏈接有幫助。

http://blog.sqlauthority.com/2009/11/12/sql-server-disable-check-constraint-enable-check-constraint/

我不知道,你可以啓用和禁用約束。涼!

賽斯

回答

3

第一條語句創建的約束,但由於它與NOCHECK創建,現有的數據是不是在創建時間驗證。

第二種說法只是簡單地將約束條件轉化爲技術上的冗餘。

就個人而言,我更喜歡第二個語句與WITH CHECK選項,這將驗證對約束所有的現有數據,並可以防止約束成爲untrusted被寫入。

ALTER TABLE [dbo].[tblEventTurnJudgeStartValues] WITH CHECK CHECK CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle] 
+0

喬,我認爲這是它可能做的。如果數據沒有通過約束測試會怎樣?然後會發生什麼?第一個alter語句失敗了嗎? – 2010-11-15 20:24:37

+0

+1:我一直使用'WITH CHECK'來啓用禁用的約束條件 – 2010-11-15 20:27:35

+0

Joe,你是說如果沒有第二條語句,就會創建約束條件,但是直到第二條alter語句才執行約束條件?如果你使用WITH CHECK而不是所有的記錄都通過了測試,那麼約束仍然被禁用? – 2010-11-15 20:34:02