Динамическое изменение поисков на основе заданных параметров - сложная тема, и выполнение одного способа по другому, даже с очень небольшим отличием, может иметь серьезные последствия для производительности. Ключ в том, чтобы использовать индекс, игнорировать компактный код, игнорировать беспокойство по поводу повторения кода, вы должны составить хороший план выполнения запроса (используйте индекс).
Прочтите это и рассмотрите все методы. Ваш лучший метод будет зависеть от ваших параметров, ваших данных, вашей схемы и вашего фактического использования:
Условия динамического поиска в T-SQL. Автор Erland Sommarskog
Проклятие и благословения динамического SQL Эрланда Соммарского
это даст лучший план выполнения:
IF @flag=1
BEGIN
SELECT
[field]
FROM [table]
WHERE col1 = @value
END
ELSE
BEGIN
SELECT
[field]
FROM [table]
WHERE col2 = @different_value
END
Однако, если вам нужен один запрос, лучше всего использовать индекс
.
SELECT
[field]
FROM [table]
WHERE @flag=1
AND col1 = @value
UNION ALL
SELECT
[field]
FROM [table]
WHERE @flag!=1
AND col2 = @different_value