Альтернативное значение, чем ноль - PullRequest
1 голос
/ 19 августа 2011

Как вы знаете, в 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);

1 Ответ

2 голосов
/ 19 августа 2011

Не проще ли это сделать?

declare @LastName varchar(50) = 'Nixon';

SELECT * FROM users
  WHERE (@LastName IS NULL) OR (@LastName = LastName);
...