修订:SQL约束以基于column1强制执行column2值

时间:2013-11-22 11:01:33

标签: sql-server tsql sql-server-2012 constraints

我需要创建一个表检查约束来实现以下目的:

  1. 如果column1为null,则column2 必须为空
  2. 如果column1不为null,则column2可以为null或not null
  3. 我已经写过这个约束,但只是想知道你是否可以专注于它。我已经正确地实现了这个目标,还是以最好的方式实现

    ALTER TABLE MyTable ADD CONSTRAINT [const_name] CHECK
    (
    (Column1 IS NULL AND Column2 IS NULL) OR 
    (Column1 IS NOT NULL AND (Column2 IS NOT NULL OR Column2 IS NULL))
    )
    

1 个答案:

答案 0 :(得分:2)

更简单的表格,基于您的新规则:

ALTER TABLE MyTable ADD CONSTRAINT [const_name] CHECK
(
    (Column2 IS NULL OR Column1 IS NOT NULL)
)

考虑一下 - 如果Column2null,那么我们就不需要断言Column1了 - 它可以是NULL,你很高兴

同样,如果Column1 NULL,那么我们不关心Column2是否NULL

我们希望此约束失败的唯一情况是,Column2不是NULLColumn1是 - 上述OR条件的错误情况