Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Correzione di "Errore di overflow aritmetico durante la conversione int in tipo di dati numerico" in SQL Server

Se ricevi un errore Msg 8115, livello 16, errore di overflow aritmetico durante la conversione int in tipo di dati numerico in SQL Server, probabilmente è perché stai eseguendo un'operazione che genera un errore di conversione dei dati a causa di un valore fuori intervallo.

Ciò accade spesso quando tenti di convertire un numero in un tipo di dati diverso, ma non rientra nell'intervallo accettato per il nuovo tipo di dati.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

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

Risultato:

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

In questo caso stavo cercando di convertire un numero intero in un decimale.

Ma il mio errore è che ho consentito solo una precisione di 3 per il valore decimale risultante. Questa precisione non è sufficiente per il valore che verrebbe prodotto da questa operazione (che sarebbe 275.00 ).

La soluzione

Il problema è facilmente risolvibile:

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

Risultato:

275.00

Tutto quello che ho fatto è stato aumentare l'argomento della precisione a un valore più sufficiente.

In particolare, l'ho aumentato da 3 a 5 .

Se mi aspettavo la visualizzazione di numeri interi più grandi (ad esempio, se il numero intero si trovava in una colonna del database), avrei bisogno di aumentare la precisione in modo che possa gestire i valori più grandi.

Per essere chiari, la precisione è il numero totale massimo di cifre decimali da memorizzare. Questo numero include sia il lato sinistro che quello destro della virgola. La precisione deve essere un valore di 1 attraverso la massima precisione di 38 . La precisione predefinita è 18 .

Stesso errore in diversi scenari

Lo stesso errore (Msg 8115) può verificarsi (con un messaggio di errore leggermente diverso) quando si utilizza una funzione come SUM() su una colonna e il calcolo restituisce un valore che non rientra nell'intervallo del tipo di colonna. Per risolvere il problema, vedere "Errore di overflow aritmetico durante la conversione dell'espressione in tipo di dati int" in SQL Server.

E lo stesso errore (Msg 8115) può verificarsi anche (con un messaggio di errore leggermente diverso) quando si tenta di inserire dati in una tabella quando il suo IDENTITY colonna ha raggiunto il limite del tipo di dati. Vedi Correzione:"Errore di overflow aritmetico durante la conversione di IDENTITY al tipo di dati…” in SQL Server per come risolvere il problema.