@ a1ex07 дал ответ для выполнения этого в виде одного запроса.Использование NULL и проверка их в каждом условии.
WHERE
table.x = CASE WHEN @x IS NULL THEN table.x ELSE @x END
или ...
WHERE
(@x IS NULL OR table.x = @x)
или ...
WHERE
table.x = COALESCE(@x, table.x)
и т. Д. И т. Д.
Однако есть одно предупреждение;Как бы удобно ни было сделать один запрос для выполнения всего этого, Все из этих ответов являются неоптимальными.Часто они утомительны.
Когда вы пишете ОДИН запрос, создается только ОДИН план выполнения.И этот ОДИН план выполнения должен подходить для ВСЕХ возможных комбинаций значений.Но это исправляет, какие индексы ищутся, какой порядок их поиска и т. Д. Это дает наименее наихудший план для запроса «один размер подходит для всех».
Вместо этого лучше добавлять условия какнеобходимо.Вы по-прежнему параметризуете их, но не включаете условие, если знаете, что параметр имеет значение NULL.
Это хорошая ссылка, объясняющая это далее, она предназначена специально для MS SQL Server, но обычно применима к любой СУБД, котораякэширует планы после компиляции SQL.
http://www.sommarskog.se/dyn-search.html