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

Ret "Aritmetisk overløbsfejl ved konvertering af udtryk til datatype int" i SQL Server

Hvis du modtager fejl Besked 8115, niveau 16, aritmetisk overløbsfejl ved konvertering af udtryk til datatype int i SQL Server kan det være, at du udfører en beregning, der resulterer i en værdi uden for området.

Dette kan ske når du bruger en funktion såsom SUM() på en kolonne, og beregningen resulterer i en værdi, der ligger uden for rækkevidden af ​​kolonnens type.

Eksempel på fejlen

Her er et eksempel på kode, der producerer fejlen:

SELECT SUM(bank_balance) 
FROM accounts;

Resultat:

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

I dette tilfælde brugte jeg SUM() funktion for at få summen af ​​bank_balance kolonne, som har en datatype på int .

Fejlen opstod, fordi resultatet af beregningen er uden for området for int datatype.

Her er alle dataene i min tabel:

SELECT bank_balance 
FROM accounts;

Resultat:

+----------------+
| bank_balance   |
|----------------|
| 1300000000     |
| 1200000000     |
| 800500000      |
+----------------+

Det er nogle store banksaldi... og tilføjelse af de tre af dem resulterer i et større tal end en int kan håndtere (int interval er -2.147.483.648 til 2.147.483.647).

Løsningen

Vi kan håndtere denne fejl ved at konvertere int kolonne til en bigint når vi kører forespørgslen:

SELECT SUM(CAST(bank_balance AS bigint)) 
FROM Accounts;

Resultat:

3300500000

Denne gang virkede det.

Du kan også ændre datatypen for den aktuelle kolonne for en mere permanent løsning.

Hvis du undrer dig, er bigint interval er -9.223.372.036.854.775.808 til 9.223.372.036.854.775.807.

Samme fejl i forskellige scenarier

Den samme fejl (Msg 8115) kan også opstå (med en lidt anderledes fejlmeddelelse), når du forsøger eksplicit at konvertere mellem datatyper, og den oprindelige værdi er uden for rækkevidden af ​​den nye type. Se Fix "Aritmetisk overløbsfejl ved konvertering af int til datatype numeric" i SQL Server for at rette dette.

Den samme fejl (Msg 8115) kan også opstå (med en lidt anderledes fejlmeddelelse), når du forsøger at indsætte data i en tabel, når dens IDENTITY kolonnen har nået sin datatypegrænse. Se Fix:"Aritmetisk overløbsfejl ved konvertering af IDENTITY til datatype…” i SQL Server for, hvordan du løser dette.


  1. Er der en LastIndexOf i SQL Server?

  2. NLS_NUMERIC_CHARACTERS indstilling for decimal

  3. pg_dump postgres-database fra fjernserver, når port 5432 er blokeret

  4. SQL Server Konverter heltal til binær streng