Насколько я понимаю (и я также пишу против ужасной устаревшей базы данных), не существует такого понятия, как динамические предложения WHERE. Это НЕ было решено.
Лично я предпочитаю генерировать динамические поиски в коде. Делает тестирование удобным. Обратите внимание, что когда вы создаете свои sql-запросы в коде, не объединяйте данные, вводимые пользователем. Используйте свои @variables!
Единственная альтернатива - использовать оператор COALESCE. Допустим, у вас есть следующая таблица:
Users
-----------
Name nvarchar(20)
Nickname nvarchar(10)
и вы хотите искать имя или псевдоним. Следующий запрос сделает это:
SELECT Name, Nickname
FROM Users
WHERE
Name = COALESCE(@name, Name) AND
Nickname = COALESCE(@nick, Nickname)
Если вы не хотите что-то искать, просто введите ноль. Например, передача «brian» для @name и null для @nick приводит к оценке следующего запроса:
SELECT Name, Nickname
FROM Users
WHERE
Name = 'brian' AND
Nickname = Nickname
Оператор coalesce превращает нуль в оценку идентичности, которая всегда верна и не влияет на предложение where.