Удобный и понятный способ сделать это (даже используемый с JOIN / APPLY):
where
(@parameter1 IS NULL OR your_condition1)
and (@parameter2 IS NULL OR your_condition2)
-- etc
Однако в большинстве больших таблиц это плохая идея (даже в большей степени с использованием JOIN / APPLY), поскольку ваш план выполнения не будет игнорировать значения NULL и создаст огромную лазейку в производительности (например: сканирование всей таблицы в поисках значений NULL). *
Обходным путем в SQL Server является использование опций WITH (RECOMPILE) в вашем запросе (доступно с SQL 2008 SP1 CU5 (10.0.2746)).
Лучший способ реализовать это (с точки зрения производительности) - использовать блок IF ... ELSE, по одному для каждой возможной комбинации. Может быть, это утомительно, но у вас будут лучшие показатели, и это не будет иметь значения для ваших настроек базы данных.
Если вам нужно больше деталей, вы можете посмотреть на КМ. ответ здесь .