Следующие два оператора имеют незначительное время выполнения для относительно большой таблицы.Впоследствии мне стало интересно, что будет считаться лучшей практикой?Лично я думаю, что утверждение «case» (вариант 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