Как вы знаете, в SQL значение null никогда не равно нулю.
Давайте представим, что у нас есть такой запрос:
declare @LastName varchar(50) = 'Nixon';
select * from Users
where LastName = @LastName;
Если я хочу разрешить переменной быть нулевой, я делаюthis:
declare @LastName varchar(50) = 'Nixon';
select * from Users
where LastName = IsNull(@LastName, LastName);
Но что, если LastName имеет значение null?Я должен сделать это:
declare @Null varchar(50) = '!{-[~]-}!'; -- any-ole gibberish
declare @LastName varchar(50) = 'Nixon';
select * from Users
where IsNull(LastName, @Null) = Coalesce(@LastName, LastName, @Null);
Это прекрасно работает, и я вижу много подобных подходов.
Но мой вопрос: это действительно лучший подход? Мне кажется, что это клудж, но я много думал об этом и просто не могу придумать ничего лучшего.
РЕДАКТИРОВАТЬ но это кажется лучшим:
declare @LastName varchar(50) = 'Nixon';
select * from Users
where (@LastName is null) or (@LastName = LastName);