MyTable.MyColumn
との値が の場合@MyVar
、NULL
次のステートメントは何を返しますか?
ISNULL(@MyVar, MyTable.MyColumn)
MyTable.MyColumn
との値が の場合@MyVar
、NULL
次のステートメントは何を返しますか?
ISNULL(@MyVar, MyTable.MyColumn)
create table MyTable
(
MyColumn int
)
insert into MyTable default values
declare @MyVar int
select ISNULL(@MyVar, MyTable.MyColumn)
from MyTable
結果:
-----------
NULL
他の人は何が起こるかを説明しています。これらの Null が不要な場合の解決策。
式がリストにあり、結果に表示しSELECT
たくない場合は、2 つ以上のパラメーターを取ることができる関数を使用できます。NULL
COALESCE()
COALESCE(@MyVar, MyTable.MyColumn, another_value)
コメントで述べたように、状態にある場合:
WHERE MyTable.MyColumn = ISNULL(@MyVar, MyTable.MyColumn)
それを次のように置き換えることができます ( null かどうかに関係なく、null のTRUE
ときに条件を保持したい場合 ):@MyVar
MyTable.MyColumn
WHERE (MyTable.MyColumn = @MyVar OR @MyVar IS NULL)
もちろん、NULL を返します。:) テストも非常に簡単です。これの全体的な必要性は何ですか?たとえば、少なくとも何らかの値が返されるようにする必要がある場合は、いくつかのオプションがあります。例:
SELECT CASE WHEN @MyVar IS NULL
THEN ISNULL(MyTable.MyColumn, 'replacementvalue')
ELSE @MyVar
END AS RESULT
FROM MyTable
ここで本当の問題についてもっと知る必要があります。
これを試して :-)
select ISNULL(null,null)