我想起了一个有趣的场景:sql Server中是否有可能定义一个表,以便通过“标准手段”(约束等),我可以确保两个或更多列是相互排斥的?
我的意思是:我可以确保只有一列包含一个值吗?
解决方法
是的,可以使用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.