SQL Serverで、「COALESCEへの引数の少なくとも1つはNULL定数ではない式である必要があります」というエラーメッセージ4127が発生する場合は、COALESCE() 式はNULLです 定数。
この問題を修正するには、少なくとも1つの引数がNULLでないことを確認してください 定数。
エラーの例
このエラーを生成するコードの例を次に示します。
SELECT COALESCE( null, null ); これを取得します:
Msg 4127, Level 16, State 1, Line 1 At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
この場合、すべての引数はNULLでした 定数であるため、エラーが返されました。
解決策
解決策は簡単です。少なくとも1つの引数がNULLでないことを確認するだけです。 定数:
SELECT COALESCE(null, 'Cat', 'Dog'); 結果:
Cat
この場合、Cat NULL以外の最初のものでした 引数など、COALESCE() その値を返しました。
ここに表示されているように、NULLを含めても問題ありません。 ではない他の引数が少なくとも1つある限り、引数として定数 NULL 定数。
NULL 式とデータベース列
NULLに注意してください 定数は、結果がNULLになる式と同じではありません 。また、NULLを含むデータベース列と同じではありません 。
たとえば、すべての引数がデータベース列を参照し、それらのデータベース列がNULLである場合 、エラーは発生しません。
次のクエリを実行するとします。
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; 結果:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
両方の列にNULLが含まれています 値。
したがって、両方の列をCOALESCE()に渡すと 、NULLの結果が得られます :
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; 結果:
NULL
列の1つをNULLに置き換える場合も、同じことが言えます。 定数:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; 結果:
NULL
つまり、すべて 引数はNULLです エラーが発生する定数。