【问题标题】:Check constraint that checks another column value检查另一个列值的检查约束
【发布时间】:2013-06-24 15:07:06
【问题描述】:

我搜索过,但我发现的所有内容要么没有回答问题,要么我不太明白

我正在创建一个表,并且我想在某些列上设置约束,如果另一列具有特定值,则要求它不为空。我现在拥有的是:

ColumnA NOT NULL CHECK (ColumnB = 8802 or ColumnB = 8804),

基本上,如果ColumnB 等于这两个值中的任何一个,ColumnA 必须有一个值,其余时间它可以为 null。

【问题讨论】:

    标签: sql


    【解决方案1】:

    也许:

    ALTER TABLE ADD CONSTRAINT A_B_Check
    CHECK (
            ColumnA IS NOT NULL 
        OR (ColumnA IS NULL AND (ColumnB <> 8802 AND ColumnB <> 8804))
    );
    

    【讨论】:

    • 我认为这看起来不错,但不幸的是,我目前没有能力真正跑去看看。不过,我确实有一两个问题。您的第一个子句没有检查,是查看 columnA 是否为空。如果 A 列有一个值,而不管 ColumnB 的值如何,该检查子句是否会被满足?另一个问题是 ColumnB 8802 AND ColumnB 8804。这是否意味着 columnB 需要等于 8802 和 8804?我应该将 AND 替换为 OR,还是可以在子句中使用括号来显示我不想先做的事情?
    • 请注意,我刚刚在第二个条件周围添加了括号。由于我目前正在打电话,因此很难解释。
    猜你喜欢
    • 2011-01-28
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多