Я пытаюсь работать на SQL Server с некоторыми параметрами, которые могут иметь значение NULL, где NULL означает «игнорировать этот параметр».
Тогда у меня есть столбец, в котором хранится отчество и может содержать нули.
У меня есть следующие условия, которые работают очень быстро:
T.tr_ben_name = ISNULL(@BenFirstName, T.tr_send_name) AND
T.tr_ben_middle = ISNULL(@BenMiddleName, T.tr_send_middle) AND
T.tr_ben_last = ISNULL(@BenLastName, T.tr_send_last) AND
T.tr_ben_last2 = ISNULL(@BenSecondLastName, T.tr_send_last2 )
Но по какой-то причине, если значение отчества и соответствующий параметр равны NULL, запись будет пропущена, даже еслиЯ отключаю ANSI NULLS.
Затем я предложил другую версию, которая работает хорошо, но в 4 раза медленнее:
(T.tr_ben_name = @BenFirstName OR @BenFirstName IS NULL) AND
(T.tr_ben_middle = @BenMiddleName OR @BenMiddleName IS NULL) AND
(T.tr_ben_last = @BenLastName OR @BenLastName IS NULL) AND
(T.tr_ben_last2 = @BenSecondLastName OR @BenSecondLastName IS NULL)
Может кто-нибудь объяснить, в чем разница между этими двумя подходами?