sql >> データベース >  >> RDS >> Sqlserver

SQLServerの「COALESCEへの引数の少なくとも1つはNULL定数ではない式である必要があります」を修正しました

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


    1. ひねりを加えたHekaton:インメモリTVP –パート2

    2. postgreSQL-in vs any

    3. CBO統計ホワイトペーパー

    4. 🆕SQLServer2022First Look-トップ5の新機能(ボーナス5の機能)