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

tsql中的独占弧-检查其中一列的约束不为null,tsql,sql-server-2008,Tsql,Sql Server 2008,我正在为给定的表实现解析多个父对象的独占arc模式。我编写了下表级别的检查约束,以便在SQLServer2008中使用。问题是,如果有3列,查询会变得更大。还有更好的办法吗 check( (Parent1Id is null AND Parent2Id is not null) OR (Parent1Id is not null AND Parent2Id is null)) 检查(COALESCE(Parent1ID,Parent2ID)不为NULL)如何?这确保至少设置了一个,但要进

我正在为给定的表实现解析多个父对象的独占arc模式。我编写了下表级别的检查约束,以便在SQLServer2008中使用。问题是,如果有3列,查询会变得更大。还有更好的办法吗

check( 
(Parent1Id is null AND Parent2Id is not null) 
OR  (Parent1Id is not null AND Parent2Id is null))
检查(COALESCE(Parent1ID,Parent2ID)不为NULL)如何?这确保至少设置了一个,但要进行否定检查,我想不出快速的解决方案

想想看,怎么样:(警告-不要短得多)


@好的,谢谢。是的,您提出的备选方案更长。@CK,谢谢您的合并功能。如果我添加另一个检查约束,该约束检查所有非空值(A不为null,B不为null)。您可以在检查约束中添加NOT吗?此外,如果涉及3列,此查询也会变得复杂。备选方案比您拥有的代码长,但对于超过2个值的任何值,它都会更短(即我的3行,使用您的方法的3行[但您的行会更长,我的4行,您的4行很长])您的NOT将不起作用,因为3列或更多列将有多个组合。我建议你试着用你的方法写3个或更多的专栏,然后再看看我的第二个答案。
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
)