我正在为给定的表实现解析多个父项的独占弧模式。我在SQL Server 2008中编写了下面的表级检查约束。这个问题,如果有3列,查询会变得更大。有没有更好的办法呢?
check(
(Parent1Id is null AND Parent2Id is not null)
OR (Parent1Id is not null AND Parent2Id is null))
答案 0 :(得分:2)
check(COALESCE(Parent1ID, Parent2ID) IS NOT NULL)
怎么样 - 这确保至少设置了一个,但是做否定检查我想不出快速解决方案。
来想一想,怎么样:(警告 - 不要太短)
check(
CASE WHEN Parent1ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent2ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent3ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent4ID IS NULL THEN 0 ELSE 1 END
= 1
)