2011-12-21 11 views
0

次の2つのステートメントはどちらも、比較的大きなテーブルに対して実行時間が無視できる程度です。その後、私はより良い練習と見なされるだろうと思っていた?個人的には、「ケース」(オプション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

+0

非常に良い点があります。クイックフィードバックを高く評価してください。 – Codingo

+1

別の、関係のない点。 SQL文字列の比較は、デフォルトでは大文字と小文字を区別しません。したがって、 'upper'コールは不要です。 – drdwilcox

関連する問題