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

Oprava Msg 8114 „Chyba při převodu datového typu varchar na číselný“ v SQL Server

Pokud se vám zobrazuje chyba SQL Server Msg 8114, která zní něco jako Chyba při převodu datového typu varchar na číselný , je to pravděpodobně proto, že se pokoušíte provést převod typu dat, který selže, protože hodnotu nelze převést na typ cíle.

Není to proto, že byste tento typ nemohli převést na nový typ. Je to kvůli samotné hodnotě.

Příklad chyby

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

SELECT CAST('Ten' AS DECIMAL(5,2));

Výsledek:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

K této chybě došlo, protože SQL Server nedokázal převést hodnotu řetězce na desítkové.

Řešení 1

Chcete-li to vyřešit, musíte se ujistit, že zadáváte hodnotu, kterou může SQL Server převést.

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.

Mějte na paměti, že k tomu nemusí dojít ve všech případech pokusu o převod řetězce na desítkové, protože některé hodnoty řetězce lze převést.

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

SELECT CAST('10' AS DECIMAL(5,2));

Výsledek:

10.00

Zde byl SQL Server schopen zjistit, že 10 je číslo, a proto byl převod úspěšný.

Řešení 2

Pokud vám nevadí, že se převod nezdaří, ale nechcete, aby vrátil chybu, vyzkoušejte TRY_CAST() nebo TRY_CONVERT() funkce.

Místo aby vrátily chybu, tyto funkce vrátí NULL když hodnotu nelze převést.

Příklad:

SELECT TRY_CAST('Ten' AS DECIMAL(5,2));

Výsledek:

NULL

  1. Chyba:Při instalaci psycopg2 na Alpine v Dockeru nebyl nalezen spustitelný soubor pg_config

  2. Jak změnit referenční akci cizího klíče? (chování)

  3. Přidejte souhrnný řádek se součty

  4. datetime vs smalldatetime v SQL Server:Jaký je rozdíl?