エラーメッセージ4151が発生した場合「最初の引数の型を知る必要があるため、NULLIFの最初の引数の型をNULL定数にすることはできません」 」は、SQL Serverでは、最初の引数としてnull値をNULLIF()
に渡しているためです。 機能。
このエラーを修正するには、関数の最初の引数としてnull定数を渡さないようにしてください。または、そうする場合は、それを特定のデータ型に変換します。
エラーの例
エラーを生成するコードの例を次に示します。
SELECT NULLIF(null, 7);
結果:
Msg 4151, Level 16, State 1, Line 1 The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.
SQL Serverでは、NULLIF()
関数の戻り値は、最初の式のデータ型を使用します。これは、null定数には既知のデータ型がないため、最初の値がnull定数であってはならないことを意味します。
このエラーは非常にまれです。ほとんどの場合、最初の引数として列名を渡します。SQLServerでは、列のデータ型が定義されています。このような場合、SQL Serverは列のデータ型を認識しているため、実際にはnull値が受け入れられます。
変数についても同じことが言えます。変数を渡す場合は、その型を宣言する必要があるため、エラーは発生しません。
いずれにせよ、このエラーが発生した場合は、次の解決策を試すことができます。
解決策
このエラーが発生した場合は、null定数を特定のデータ型に変換できます。
SELECT NULLIF(CAST(null AS int), 7);
結果:
NULL
この場合、NULL
2つの引数が異なり、NULL
であるため、が返されます。 は最初の引数です。
最初の引数が列の場合、列にはすでにデータ型があるため、その型の変換について心配する必要はありません。
ProductPrice
があるとします。 列:
SELECT ProductPrice
FROM Products;
結果:
+----------------+ | ProductPrice | |----------------| | 25.99 | | 14.75 | | 11.99 | | 0.00 | | 0.00 | | NULL | | 9.99 | | 25.99 | +----------------+
列にNULL値が含まれています。
ただし、その列をNULLIF()
に渡すことはできます エラーを引き起こさずに4151:
SELECT NULLIF(ProductPrice, 0) AS Result
FROM Products;
結果:
+----------+ | Result | |----------| | 25.99 | | 14.75 | | 11.99 | | NULL | | NULL | | NULL | | 9.99 | | 25.99 | +----------+
SQL Serverは列のデータ型をすでに認識しているため、エラーは発生しませんでした。