1

ご存知のように、null は SQL では決して null と等しくなりません。

次のようなクエリがあるとしましょう。

declare @LastName varchar(50) = 'Nixon';
select * from Users 
    where LastName = @LastName;

変数を null にできるようにしたい場合は、次のようにします。

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);
4

1 に答える 1

2

これを行う方が簡単ではないでしょうか?

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

SELECT * FROM users
  WHERE (@LastName IS NULL) OR (@LastName = LastName);
于 2011-08-19T16:24:50.203 に答える