2010-11-15 46 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