基于两列添加约束



我有一个名为Phone的表,它有两列Number varchar(32)Extension varchar(32)。我想添加具有以下条件的Constraint:

  1. 如果没有提供分机,则需要提供电话号码。
  2. 如果没有提供电话号码,则需要扩展。
  3. 可提供电话号码和分机。

我添加了以下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满足前两个要求,但是,如果我提供NumberExtension,我得到约束异常。

我试过添加:

...
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)
);

最新更新