Этот вопрос действительно помог мне с подобной проблемой, из-за которой некоторые из нас немного почесали головы. Я пишу это только в том случае, если кто-то другой пытается применить тот же подход и не может понять, почему он не работает.
Я пытался оценить только часть составного предложения WHERE, если @Parameter не был нулевым. Я пытался сделать это, как показано ниже, но всегда не возвращал строк, если @Parameter был нулевым.
DECLARE @Parameter int = null;
SELECT * FROM TABLE
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter)
Я неправильно подумал, что (@Parameter is not null AND [AlternateID] = @Parameter)
просто не будет частью полного предложения WHERE, если @Parameter is null. Однако все предложение WHERE возвращало значение false. Средство защиты было добавить OR 1 = 1, как показано ниже:
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter OR 1=1)
Конечно, подход, изложенный Али (недостаточно репутации, чтобы поднять голос), решает это более эффективно.
WHERE [AlternateID] is not null
AND [Partner_Customer_ID] = ISNULL(@Parameter, [Partner_Customer_ID])