SQL-Server:将列定义为互斥

时间:2009-12-02 10:39:21

标签: sql-server database-design

与同事开玩笑,我想出了一个有趣的场景:在SQL Server中是否可以定义一个表,以便通过“标准手段”(约束等)来确保两个或多个列互相排斥?

我的意思是:我可以确保只有一个列包含值吗?

1 个答案:

答案 0 :(得分:14)

是的,您可以使用CHECK约束:

ALTER TABLE YourTable
ADD CONSTRAINT ConstraintName CHECK (col1 is null or col2 is null)

根据您的评论,如果许多列是独占的,您可以像这样检查它们:

case when col1 is null then 0 else 1 end +
case when col2 is null then 0 else 1 end +
case when col3 is null then 0 else 1 end +
case when col4 is null then 0 else 1 end
= 1

这表示四列中的一列必须包含值。如果它们都可以为NULL,只需检查<= 1