sql >> Database >  >> RDS >> Sqlserver

Fix "Rekenkundige overloopfout bij het converteren van expressie naar gegevenstype int" in SQL Server

Als u de fout Msg 8115, Level 16, Rekenkundige overloopfout ontvangt bij het converteren van expressie naar gegevenstype int in SQL Server kan het zijn dat u een berekening uitvoert die resulteert in een waarde die buiten het bereik valt.

Dit kan gebeuren wanneer je een functie gebruikt zoals SUM() op een kolom, en de berekening resulteert in een waarde die buiten het bereik van het kolomtype ligt.

Voorbeeld van de fout

Hier is een voorbeeld van code die de fout veroorzaakt:

SELECT SUM(bank_balance) 
FROM accounts;

Resultaat:

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

In dit geval gebruikte ik de SUM() functie om de som van het bank_balance . te krijgen kolom met het gegevenstype int .

De fout is opgetreden omdat het resultaat van de berekening buiten het bereik van de int . valt gegevenstype.

Hier zijn alle gegevens in mijn tabel:

SELECT bank_balance 
FROM accounts;

Resultaat:

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

Dat zijn enkele grote banksaldi... en het toevoegen van die drie resulteert in een groter aantal dan een int aankan (de int bereik is -2.147.483.648 tot 2.147.483.647).

De oplossing

We kunnen deze fout oplossen door de int . te converteren kolom naar een bigint wanneer we de query uitvoeren:

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

Resultaat:

3300500000

Deze keer werkte het.

U kunt ook het gegevenstype van de eigenlijke kolom wijzigen voor een meer permanente oplossing.

Voor het geval je het je afvraagt, de bigint bereik is -9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807.

Dezelfde fout in verschillende scenario's

Dezelfde fout (bericht 8115) kan ook optreden (met een iets ander foutbericht) wanneer u expliciet probeert te converteren tussen gegevenstypen en de oorspronkelijke waarde buiten het bereik van het nieuwe type valt. Zie "Rekenkundige overloopfout bij het converteren van int naar gegevenstype numeriek" in SQL Server repareren om dit op te lossen.

Dezelfde fout (bericht 8115) kan ook optreden (met een iets ander foutbericht) wanneer u probeert gegevens in een tabel in te voegen wanneer de IDENTITY kolom heeft de limiet van het gegevenstype bereikt. Zie Fix:"Rekenkundige overloopfout bij het converteren van IDENTITY naar gegevenstype…” in SQL Server voor hoe u dit kunt oplossen.


  1. SQL Server-fout 4104:de meerdelige id kan niet worden gebonden.

  2. Configuratieparameter work_mem in PostgreSQL op Linux

  3. PostgreSQL BESCHRIJVING TABEL Equivalent

  4. PL/SQL-verzameling:geneste tabel in Oracle-database