我正在尝试向表添加约束,其中一列必须是列表中的值之一,如下所示:
ALTER TABLE bread_crumbs WITH CHECK
ADD CONSTRAINT CK_uplink_relationship
CHECK (uplink_relationship in ('Cites', 'CitedBy', null))
我仍然可以插入uplink_relationship
列的任何值的行。
<{1}}约束未被强制执行。
我读了几个答案,如果在有违反行的情况下创建约束,可能会发生这种情况。
所以我删除了约束,修复了所有数据,然后重新添加了约束。
但没有运气。
我仍然可以输入无效数据。
为什么会发生这种情况?
此外,我尝试使用和不使用声明的CHECK
部分。
答案 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)
编辑: