sql >> Databáze >  >> RDS >> Sqlserver

Oprava Msg 529 „Explicitní převod z datového typu int na xml není povolen“ v SQL Server

Pokud se vám zobrazuje chyba SQL Server Msg 529, která zní něco jako Explicitní převod z datového typu int na xml není povolen , je to pravděpodobně proto, že se pokoušíte provést převod typu dat, který není povolen.

SQL Server neumožňuje určité konverze. Pokud se pokusíte provést takový převod, zobrazí se tato chyba.

Příklad chyby

Zde je příklad kódu, který způsobuje chybu:

SELECT CAST(10 AS xml);

Výsledek:

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

Zde jsme se pokusili převést číslo 10 na xml typ.

SQL Server takovou konverzi neumožňuje, a proto vrátil chybu.

Stejnou chybu dostaneme, když se pokusíme převést tuto hodnotu na date typ:

SELECT CAST(10 AS date);

Výsledek:

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

Můžete předpokládat, že bychom se mohli chyby zbavit pomocí TRY_CAST() místo toho funkci. Ale tento předpoklad by byl nesprávný:

SELECT TRY_CAST(10 AS xml);

Výsledek:

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

Ačkoli TRY_CAST() funkci lze normálně použít k vrácení NULL místo chyby to neplatí pro tuto konkrétní chybu.

Když se konverze nezdaří, protože konverze není povolena, pak i TRY_CAST() (a TRY_CONVERT() ) vrátí chybu.

Řešení

Chcete-li tento problém vyřešit, musíte změnit buď původní typ, nebo typ cíle (nebo obojí).

Pokud procházíte kolonou, zkontrolujte, zda máte správný sloupec. Totéž platí, pokud předáváte proměnnou – zkontrolujte, zda se jedná o správnou proměnnou.

Například následující převod je úspěšný:

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

Výsledek:

{a:10}

A následující také uspěje:

SELECT CAST(10 AS char(2));

Výsledek:

10

V závislosti na skutečné hodnotě můžete zkusit převést původní hodnotu na přijatelný typ.

Například bychom mohli změnit náš původní kód produkující chyby XML na následující kód nevytvářející chyby:

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

Výsledek:

10

V tomto případě operace neověřila, že výsledkem je platný dokument XML. Jednoduše převedl původní hodnotu do xml typ.

To však nemusí vždy fungovat v závislosti na hodnotě, kterou se pokoušíte převést. Například náš příklad data stále vytváří chybu (i když jinou chybu):

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

Výsledek:

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

V tomto případě se zobrazí chyba Msg 241, což je jiná chyba. V tomto případě není chyba způsobena nepovolením převodu. Je to kvůli skutečné hodnotě, která způsobuje problémy. V našem případě SQL Server nedokáže převést číslo 10 na platné datum. Potřebovali bychom změnit vstupní hodnotu na smysluplnější hodnotu, která představuje platné datum.


  1. Jak získat číselné typy z MySQL pomocí PDO?

  2. Plánování diskového prostoru pro databáze

  3. Porovnání nabídek Galera Cluster Cloud:Část druhá Google Cloud Platform (GCP)

  4. SQL Stále dostává chybu s ON UPDATE CASCADE