以下两个语句在相对较大的表上的执行时间可忽略不计。随后我想知道哪种更好的做法?就个人而言,我认为“案例”(选项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
答案 0 :(得分:4)
就我个人而言,我无法想象有人会更清楚地发现CASE
版本。第一个选项是基本的布尔逻辑,每个CS学生都会学习并且我们都应该觉得非常舒服。
另外,我甚至不确定你的2个表达式是否相同,部分原因是CASE
表达式基本上是不可理解的。