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

SQLServerのエラーメッセージ4151「最初の引数のタイプを知る必要があるため、NULLIFの最初の引数のタイプをNULL定数にすることはできません」を修正しました。

    エラーメッセージ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は列のデータ型をすでに認識しているため、エラーは発生しませんでした。


    1. PHPでMySQLデータをExcelにエクスポートする

    2. PostgreSQLで月名を月番号に変換する

    3. バックアップからのMySQLまたはMariaDBGaleraクラスターの完全な復元

    4. T-SQLのテーブル変数にSELECTINTO