为什么CHECK约束在SQL Server中不起作用

时间:2015-03-24 21:32:33

标签: sql-server

我正在尝试向表添加约束,其中一列必须是列表中的值之一,如下所示:

ALTER TABLE bread_crumbs WITH CHECK
  ADD CONSTRAINT CK_uplink_relationship
  CHECK (uplink_relationship in ('Cites', 'CitedBy', null))

我仍然可以插入uplink_relationship列的任何值的行。 <{1}}约束未被强制执行。

我读了几个答案,如果在有违反行的情况下创建约束,可能会发生这种情况。

所以我删除了约束,修复了所有数据,然后重新添加了约束。

但没有运气。

我仍然可以输入无效数据。

为什么会发生这种情况?

此外,我尝试使用和不使用声明的CHECK部分。

1 个答案:

答案 0 :(得分:5)

必须单独处理

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)

编辑:

SET ASI_NULL