【发布时间】:2010-07-14 19:01:57
【问题描述】:
有没有办法在 SQL Server 2008 中添加一个约束来验证如果用户尝试在 A 列中输入一个值,它只能在 B 列为空时才可以,反之亦然
例子
- 如果 A 为 NULL,则 B 可以有值
- 如果 B 为 NULL,则 A 可以有一个值
- A 和 B 不能同时具有值
【问题讨论】:
标签: sql sql-server constraints
有没有办法在 SQL Server 2008 中添加一个约束来验证如果用户尝试在 A 列中输入一个值,它只能在 B 列为空时才可以,反之亦然
例子
【问题讨论】:
标签: sql sql-server constraints
类似这样的:
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
)
【讨论】:
这似乎对我有用:
CREATE TABLE dbo.Test_Constraint
(
a INT NULL,
b VARCHAR(10) NULL,
CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL)
)
【讨论】: