tsql中的独占弧 - 用于检查其中一列的约束不为null

时间:2011-07-28 12:17:36

标签: tsql sql-server-2008

我正在为给定的表实现解析多个父项的独占弧模式。我在SQL Server 2008中编写了下面的表级检查约束。这个问题,如果有3列,查询会变得更大。有没有更好的办法呢?

check( 
(Parent1Id is null AND Parent2Id is not null) 
OR  (Parent1Id is not null AND Parent2Id is null))

1 个答案:

答案 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
)