Răz*_*nda 0 sql t-sql sql-server sql-server-2008
在T-SQL中表达的最简单的方法是,只有1和1个布尔条件中的1个为真(需要在CHECK约束中使用)?
XOR适用于2个条件,例如,A XOR B将确保设置正好1,但它不适用于3个条件:

一种解决方案是从中获取某种类型的集合,过滤条件为真,执行和聚合/求和并检查结果是否等于1.
我会按照以下方式构建你CHECK的:
CHECK (
CASE WHEN <condition 1> THEN 1 ELSE 0 END +
CASE WHEN <condition 2> THEN 1 ELSE 0 END +
CASE WHEN <condition 3> THEN 1 ELSE 0 END
= 1
)
Run Code Online (Sandbox Code Playgroud)
它略显冗长,但希望看到你的意图是可读的.它也比XOR更容易扩展到其他类似的要求(例如"必须匹配5个条件中的2个"可以遵循相同的结构)
对于SQL Server 2012或更高版本,您可以更简洁IIF:
CHECK (
IIF(<condition 1>,1,0) +
IIF(<condition 2>,1,0) +
IIF(<condition 3>,1,0)
= 1
)
Run Code Online (Sandbox Code Playgroud)