我想写下以下内容
CASE [FOO]
WHEN 1 THEN 'YES'
WHEN 0 THEN 'NO'
WHEN NULL THEN 'NO'
END
我当然可以写
CASE
WHEN [FOO] = 1 THEN 'YES'
WHEN [FOO] = 0 OR FOO IS NULL THEN 'NO'
END
相反。
抛开风格不谈,是否有任何理由(例如性能)更喜欢其中一种?
如果可能的话,我会使用第一种风格,并且你对 CASE 很有价值。
第二种语法更灵活,可以采用多种值,因此有时您被迫使用该语法。
“简单”
CASE
表达式只是测试相等性的简写方式 (=
) - 不是 IS
。
所以除非你用
SET ANSI_NULLS OFF
运行(你不应该这样!),否则这不会如你所愿。
如果您查看第一个语句的执行计划,您会发现它无论如何都会扩展到嵌套的“搜索”表达式
CASE
WHEN [FOO] = ( 1 ) THEN 'YES'
ELSE
CASE
WHEN [FOO] = ( 0 ) THEN 'NO'
ELSE
CASE
WHEN [FOO] IS NULL THEN 'NO'
ELSE NULL
END
END
END