Sql Server - 约束 - 仅当列B为空时允许设置列A,反之亦然

时间:2010-07-14 19:01:58

标签: sql sql-server constraints

有没有办法在SQL Server 2008中添加一个约束,该约束将验证如果用户尝试在列A中输入值,则只有在列B为空且反之亦然时才能验证

实施例

  • 如果A为NULL,则B可以具有值
  • 如果B为NULL,则A可以具有值
  • A和B不能同时拥有价值

2 个答案:

答案 0 :(得分:6)

这样的事情:

ALTER TABLE foo WITH CHECK ADD
    CONSTRAINT CK_Foo_reason CHECK (
        ColA IS NOT NULL AND ColB IS NULL
        OR
        ColA IS NULL AND ColB IS NOT NULL
        )

编辑:问题更新后

这取决于是否允许两列都为NULL

        ColA IS NULL OR ColB IS NULL

<击>

编辑2:对于3列,其中一列必须是NOT NULL

我害怕没有聪明的裤子回答。我添加了空格,希望能让它更清晰

ALTER TABLE foo WITH CHECK ADD
    CONSTRAINT CK_Foo_reason CHECK (
        ColA IS NOT NULL AND ColB IS NULL     AND ColC IS NULL
        OR
        ColA IS NULL     AND ColB IS NOT NULL AND ColC IS NULL
        OR
        ColA IS NULL     AND ColB IS NULL     AND ColC IS NOT NULL
        )

答案 1 :(得分:0)

这似乎对我有用:

CREATE TABLE dbo.Test_Constraint
(
    a INT NULL,
    b VARCHAR(10) NULL,
    CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL)
)