Вы можете проверить, имеет ли значение нулевое значение в запросе, в сочетании с вашим условием и оператором или, который допускает необязательные параметры.
Это сработает для утверждения типа.
SELECT [CostLevelId], [CostNumber], [Description]
FROM [CostLevel]
WHERE
(@CostNumber is null or [CostNumber] LIKE '%'+@CostNumber+'%')
and
(@Description is null or [Description] LIKE '%'+@Description+'%')
если это прямое сравнение на равенство, вы можете использовать coalesce для сравнения либо с заполненной переменной, либо, когда переменная имеет значение null, с самим собой.
SELECT [CostLevelId], [CostNumber], [Description]
FROM [CostLevel]
WHERE
[CostNumber] = coalesce(@CostNumber,[CostNumber])
and
[Description] = coalesce(@Description,[CostNumber])
Имейте в виду, что это может отрицательно сказаться на ваших планах запросов, в зависимости от того, какие переменные установлены, заполнения таблиц, структуры базы данных и т. Д. Вы можете даже обнаружить, что динамический SQL-подход выполняется более эффективно, чем этот, несмотря на дополнительные сложности в его конструкция.