抛开风格不谈,有什么理由更喜欢简单的“CASE WHEN”而不是搜索?

问题描述 投票:0回答:2

我想写下以下内容

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

相反。

抛开风格不谈,是否有任何理由(例如性能)更喜欢其中一种?

sql sql-server tsql case
2个回答
0
投票

如果可能的话,我会使用第一种风格,并且你对 CASE 很有价值。

第二种语法更灵活,可以采用多种值,因此有时您被迫使用该语法。


0
投票

“简单”

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 
© www.soinside.com 2019 - 2024. All rights reserved.