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
です エラーが発生する定数。