我有一个名为Phone
的表,它有两列Number varchar(32)
和Extension varchar(32)
。我想添加具有以下条件的Constraint
:
- 如果没有提供分机,则需要提供电话号码。
- 如果没有提供电话号码,则需要扩展。
- 可提供电话号码和分机。
我添加了以下Constraint
来满足所有三个要求:
ALTER TABLE Phone
ADD CONSTRAINT RequirePhone
CHECK (
Number IS NULL AND EXTENSION IS NOT NULL
OR (Number IS NOT NULL AND Extension IS NULL)
);
上面的constraint
满足前两个要求,但是,如果我提供Number
和Extension
,我得到约束异常。
我试过添加:
...
OR (Number IS NULL AND Extension IS NULL)
但是我仍然得到相同的错误。
有什么建议可以解决这个问题吗?
最后一个子句不是必须是
OR (Number is NOT NULL AND Extension IS NOT NULL)
(1)..(3)等价于两个null是禁止的,其余都是OK的
ALTER TABLE Phone
ADD CONSTRAINT RequirePhone
CHECK (Number IS NOT NULL OR Extension IS NOT NULL)
);