在T-SQL中表达的最简单的方法是,只有1和1个布尔条件中的1个为真(需要在CHECK约束中使用)?
XOR
适用于2个条件,例如,A XOR B
将确保设置正好1,但它不适用于3个条件:
一种解决方案是从中获取某种类型的集合,过滤条件为真,执行和聚合/求和并检查结果是否等于1.
我会按照以下方式构建你CHECK
的:
CHECK ( CASE WHENTHEN 1 ELSE 0 END + CASE WHEN THEN 1 ELSE 0 END + CASE WHEN THEN 1 ELSE 0 END = 1 )
它略显冗长,但希望看到你的意图是可读的.它也比XOR更容易扩展到其他类似的要求(例如"必须匹配5个条件中的2个"可以遵循相同的结构)
对于SQL Server 2012或更高版本,您可以更简洁IIF
:
CHECK ( IIF(,1,0) + IIF( ,1,0) + IIF( ,1,0) = 1 )