ご存知のように、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);