Метод, который я использовал в прошлом для этого сценария, заключается в использовании функции COALESCE как части моего предложения WHERE. Books Online предоставит более подробную информацию о функции, но вот фрагмент того, как вы можете использовать ее в описанном вами сценарии:
create procedure usp_TEST_COALESCE
(
@parm1 varchar(32) = null,
@parm2 varchar(32) = null,
@parm3 int = null
)
AS
SELECT *
FROM [TableName]
WHERE Field1 = COALESCE(@parm1, Field1)
AND Field2 = COALESCE(@parm2, Field2)
AND Field3 = COALESCE(@parm3, Field3)
Функция COALESCE вернет первое ненулевое выражение из своих аргументов. В приведенном выше примере, если какой-либо из параметров имеет значение null, функция COALESCE будет использовать значение в базовом поле.
Одним из важных предостережений при использовании этого метода является то, что базовые поля в таблице (которые составляют ваше предложение where) должны быть не обнуляемыми.