2011-12-21 2 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

+0

Очень хорошие очки. Оцените быструю обратную связь. – Codingo

+1

Другая, несвязанная точка. Сравнение строк SQL по умолчанию нечувствительно к регистру. Поэтому «верхние» вызовы не нужны. – drdwilcox

Смежные вопросы