2011-12-21 53 views
0

以下两条语句在相对较大的表上执行时间可以忽略不计。随后我想知道哪个会被认为是更好的做法?就我个人而言,我认为'案例'(选项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 

回答

4

就个人而言,我无法想象任何人找到CASE版本更加清晰。第一个选项是基本布尔逻辑,每个CS学生都学习并且我们都应该感到非常舒适。

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

+0

我不认为它们是等同的。 – Bernard 2011-12-21 01:11:40

+0

非常好的一点。欣赏快速反馈。 – Codingo 2011-12-21 01:12:04

+1

另一个无关的点。 SQL字符串比较默认情况下不区分大小写。所以'上部'呼叫是不必要的。 – drdwilcox 2011-12-21 01:13:43

相关问题