sql >> Databasteknik >  >> RDS >> Sqlserver

Åtgärda "Aritmetiskt spillfel vid konvertering av uttryck till datatyp int" i SQL Server

Om du får felmeddelandet Msg 8115, Level 16, Aritmetic overflow-fel vid konvertering av uttryck till datatyp int i SQL Server kan det vara så att du utför en beräkning som resulterar i ett värde utanför intervallet.

Detta kan hända när du använder en funktion som SUM() på en kolumn, och beräkningen resulterar i ett värde som ligger utanför intervallet för kolumntypen.

Exempel på felet

Här är ett exempel på kod som ger felet:

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 det här fallet använde jag SUM() funktion för att få summan av bank_balance kolumn, som har datatypen int .

Felet uppstod eftersom resultatet av beräkningen ligger utanför intervallet för int datatyp.

Här är all information i min tabell:

SELECT bank_balance 
FROM accounts;

Resultat:

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

Det är några stora banktillgodohavanden... och att lägga till de tre resulterar i ett större antal än en int kan hantera (int intervallet är -2 147 483 648 till 2 147 483 647).

Lösningen

Vi kan hantera detta fel genom att konvertera int kolumn till en bigint när vi kör frågan:

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

Resultat:

3300500000

Den här gången fungerade det.

Du kan också ändra datatypen för den faktiska kolumnen för en mer permanent lösning.

Om du undrar, bigint intervallet är -9 223 372 036 854 775 808 till 9 223 372 036 854 775 807.

Samma fel i olika scenarier

Samma fel (Msg 8115) kan också uppstå (med ett lite annorlunda felmeddelande) när du försöker explicit konvertera mellan datatyper och det ursprungliga värdet ligger utanför intervallet för den nya typen. Se Åtgärda "Arithmetic overflow-fel vid konvertering av int till datatyp numeric" i SQL Server för att åtgärda detta.

Samma fel (Msg 8115) kan också uppstå (med ett något annorlunda felmeddelande) när du försöker infoga data i en tabell när dess IDENTITY kolumnen har nått sin datatyps gräns. Se Fix:"Aritmetiskt spillfel vid konvertering av IDENTITY till datatyp...” i SQL Server för att åtgärda detta.


  1. MySQL gå med i where-klausulen

  2. MySQL INSERT eller REPLACE kommandon

  3. ScaleGrid lanserar stöd för Google Cloud Platform (GCP) för Managed Database Hosting

  4. Förhandsgranska och ladda upp bilder med PHP och MySQL-databas