Типичная логика будет не использовать case
, просто логическая логика:
WHERE table.column1 = something AND
(@condition1 = 0 OR table.column2 = @condition1)
(И IS NULL
может часто использоваться вместо = 0
для сценария "все".)
Это лучше или хуже динамического SQL? По сути, это вопрос производительности. Если у вас есть индекс только на (column1)
, то он будет использоваться либо для динамического запроса, либо для логического (или case
) логического запроса. Это не имеет значения.
Однако, если у вас есть индекс на (column1, column2)
, то приведенное выше, вероятно, не будет использовать индекс. Эквивалентная версия с использованием динамического SQL будет использовать индекс, поэтому выполнение запроса будет быстрее - если вы не выберете все значения.
В противовес этому вам необходимо сбалансировать составление запроса. Обычно это занимает некоторое время, но не так много. Если имеют значение миллисекунды, то имеет значение компиляция. Если десятки секунд имеют значение, то, вероятно, нет.
Итак, есть разные вещи, которые вам нужно сбалансировать. Нередко динамический SQL является наиболее эффективным вариантом, особенно при наличии нескольких условий.