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

Oprava „Aritmetická chyba přetečení při převodu int na datový typ numeric“ v SQL Server

Pokud se zobrazuje chyba Msg 8115, Level 16, Aritmetic overflow error převod int na datový typ numeric v SQL Server je to pravděpodobně proto, že provádíte operaci, která vede k chybě převodu dat kvůli hodnotě mimo rozsah.

To se často stane, když se pokusíte převést číslo na jiný datový typ, ale je to mimo povolený rozsah pro nový datový typ.

Příklad chyby

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

SELECT CAST(275 AS DECIMAL(3, 2));

Výsledek:

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting int to data type numeric.

V tomto případě jsem se snažil převést celé číslo na desítkové.

Ale moje chyba je, že jsem povolil pouze přesnost 3 pro výslednou desetinnou hodnotu. Tato přesnost není dostatečná pro hodnotu, kterou by tato operace vytvořila (což by bylo 275.00 ).

Řešení

Problém je snadno vyřešen:

SELECT CAST(275 AS DECIMAL(5, 2));

Výsledek:

275.00

Jediné, co jsem udělal, bylo zvýšení argumentu přesnosti na dostatečnější hodnotu.

Konkrétně jsem ji zvýšil z 35 .

Pokud bych očekával, že projdou větší celá čísla (například pokud bylo celé číslo ve sloupci databáze), musel bych zvýšit přesnost, aby mohl zpracovat větší hodnoty.

Jen pro upřesnění, přesnost je maximální celkový počet desetinných číslic, které mají být uloženy. Toto číslo zahrnuje levou i pravou stranu desetinné čárky. Přesnost musí být hodnota od 1 s maximální přesností 38 . Výchozí přesnost je 18 .

Stejná chyba v různých scénářích

Ke stejné chybě (Msg 8115) může dojít (s mírně odlišnou chybovou zprávou), když použijete funkci jako SUM() na sloupec a výsledkem výpočtu je hodnota, která je mimo rozsah typu sloupce. Chcete-li to vyřešit, viz Oprava „Aritmetická chyba přetečení při převodu výrazu na datový typ int“ v SQL Server.

A stejná chyba (Msg 8115) může také nastat (s mírně odlišnou chybovou zprávou), když se pokusíte vložit data do tabulky, když je IDENTITY sloupec dosáhl limitu svého datového typu. Viz Oprava:„Aritmetická chyba přetečení při převodu IDENTITY na datový typ…” v SQL Server, kde najdete, jak to opravit.


  1. Zakažte kontroly cizích klíčů PostgreSQL pro migrace

  2. Eliminace MySQL Split-Brain v multi-cloudových databázích

  3. Co je AWS RDS

  4. Rozšířené SQL:Vložení výstupu parametrizované funkce s hodnotou tabulky do tabulky SQL