根据两列

时间:2016-09-29 18:23:43

标签: sql sql-server sql-server-2012

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

  1. 如果未提供附加信息,则需要电话号码。
  2. 如果未提供电话号码,则需要分机。
  3. 可以提供电话号码和分机号。
  4. 我添加了以下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)
    

    但我仍然得到同样的错误。

    有关如何解决此问题的任何建议?

2 个答案:

答案 0 :(得分:4)

你的最后一句不是

OR (Number is NOT NULL AND Extension IS NOT NULL)

答案 1 :(得分:1)

(1)..(3)相当于两个NULL都是禁止的,其余的都是OK

ALTER TABLE Phone
ADD CONSTRAINT RequirePhone
   CHECK (Number IS NOT NULL OR Extension IS NOT NULL)
);