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

SQLServerのメッセージ529「データ型intからxmlへの明示的な変換は許可されていません」を修正しました

    データ型intからxmlへの明示的な変換は許可されていませんのようなSQLServerエラーMsg529が発生した場合 、許可されていないデータ型変換を実行しようとしていることが原因である可能性があります。

    SQL Serverは、特定の変換を許可していません。このような変換を実行しようとすると、このエラーが発生します。

    エラーの例

    エラーを生成するコードの例を次に示します。

    SELECT CAST(10 AS xml);

    結果:

    Msg 529, Level 16, State 2, Line 1
    Explicit conversion from data type int to xml is not allowed.

    ここでは、数値10をxmlに変換しようとしました。 タイプ。

    SQL Serverはそのような変換を許可しないため、エラーを返しました。

    その値をdateに変換しようとすると、同じエラーが発生します タイプ:

    SELECT CAST(10 AS date);

    結果:

    Msg 529, Level 16, State 2, Line 1
    Explicit conversion from data type int to date is not allowed.

    TRY_CAST()を使用することで、エラーを取り除くことができると思われるかもしれません。 代わりに機能します。しかし、その仮定は正しくありません:

    SELECT TRY_CAST(10 AS xml);

    結果:

    Msg 529, Level 16, State 2, Line 1
    Explicit conversion from data type int to xml is not allowed.

    TRY_CAST() 関数は通常、NULLを返すために使用できます エラーの代わりに、この特定のエラーには適用されません。

    変換が許可されていないために変換が失敗した場合は、TRY_CAST() (およびTRY_CONVERT() )エラーを返します。

    解決策

    これを修正するには、元のタイプまたは宛先タイプのいずれか(または両方)を変更する必要があります。

    列を渡す場合は、正しい列があることを確認してください。変数を渡す場合も同じです–それが正しい変数であることを確認してください。

    たとえば、次の変換は成功します:

    SELECT CAST('{a:10}' AS xml);

    結果:

    {a:10}

    そして、以下も成功します:

    SELECT CAST(10 AS char(2));

    結果:

    10

    実際の値に応じて、元の値を受け入れられたタイプに変換してみることができます。

    たとえば、元のXMLエラー生成コードを次の非エラー生成コードに変更できます。

    SELECT CAST(CAST(10 AS varchar) AS xml);

    結果:

    10

    この場合、操作は結果が有効なXMLドキュメントであることを検証しませんでした。元の値をxmlに変換するだけです。 タイプ。

    ただし、変換しようとしている値によっては、これが常に機能するとは限りません。たとえば、日付の例でもエラーが発生します(ただし、別のエラーが発生します):

    SELECT CAST(CAST(10 AS varchar) AS date);

    結果:

    Msg 241, Level 16, State 1, Line 1
    Conversion failed when converting date and/or time from character string.

    この場合、別のエラーであるエラーMsg241が発生します。この場合、エラーは変換が許可されていないことが原因ではありません。これは、実際の値が問題を引き起こしているためです。この場合、SQLServerは数値10を有効な日付に変換できません。入力値を、有効な日付を表すより意味のある値に変更する必要があります。


    1. offset+limitを使用してmySQLクエリの結果の総数を検索します

    2. PostgreSQL関数の言語sqlと言語plpgsqlの違い

    3. ListをJavaからOracleプロシージャに渡す方法は?

    4. ラージオブジェクトは自動コミットモードでは使用できません