为什么是SQL Server不工作检查约束
问题描述:
我试图约束添加到表,其中一列必须是值中的一个类似下面的列表:为什么是SQL Server不工作检查约束
ALTER TABLE bread_crumbs WITH CHECK
ADD CONSTRAINT CK_uplink_relationship
CHECK (uplink_relationship in ('Cites', 'CitedBy', null))
我可以仍然插入uplink_relationship
列的任何值的行。 CHECK
约束没有被强制执行。
我读了几个答案,如果您在创建约束的同时存在违反约束的行,则可能会发生这种情况。
所以我删除了约束,固定所有的数据,并添加约束回。
,但没有运气。
我仍然可以输入无效数据。
任何想法为什么会发生这种情况?
此外,我尝试了和没有WITH CHECK
声明的一部分。
答
NULL必须单独
处理尝试查询
Select * from employee where empId in (1, 2, NULL) -- will result in 0 records
ALTER TABLE bread_crumbs
WITH CHECK
ADD CONSTRAINT CK_uplink_relationship
CHECK (uplink_relationship in ('Cites','CitedBy') OR uplink_relationship IS NULL)
编辑:
+1
@MartinSmith:感谢您的更正:)我将删除它 – 2015-03-24 21:40:29
+0
谢谢 - IS NULL工作。 – Sam 2015-03-25 13:14:32
SQL使用三个值逻辑。 'true','false','未知'。如果条件评估为“false”,则检查约束只会被违反。 – 2015-03-24 21:38:52
'IN(null)'计算为'= NULL';这总是未知的。你不能检查是否* *等于*'NULL',只有当它是'NULL'时。 – 2015-03-24 22:43:19