这被认为是更好的做法?标准和/或条款或案例呢?

时间:2011-12-21 01:00:30

标签: sql sql-server-2008 tsql

以下两个语句在相对较大的表上的执行时间可忽略不计。随后我想知道哪种更好的做法?就个人而言,我认为“案例”(选项2)声明对于那些从现在开始查看一年的人来说要容易得多,但是选项1似乎更清晰。

选项#1:

select *
from imaginarytable
where   1=1
    and (@section_name = 'ALL' or upper(section_name) = upper(@section_name))

选项#2:

select *
from imaginarytable
where   1=1
    and upper(section_name)=
        case when @section_name <> 'ALL' 
             then upper(@section_name
             else upper(section_name)
        end

1 个答案:

答案 0 :(得分:4)

就我个人而言,我无法想象有人会更清楚地发现CASE版本。第一个选项是基本的布尔逻辑,每个CS学生都会学习并且我们都应该觉得非常舒服。

另外,我甚至不确定你的2个表达式是否相同,部分原因是CASE表达式基本上是不可理解的。