Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

„Arithmetischer Überlauffehler beim Konvertieren des Ausdrucks in den Datentyp int“ in SQL Server behoben

Wenn Sie den Fehler Msg 8115, Level 16, Arithmetic overflow error converting expression to data type int erhalten In SQL Server kann es sein, dass Sie eine Berechnung durchführen, die zu einem Wert außerhalb des zulässigen Bereichs führt.

Dies kann passieren wenn Sie eine Funktion wie SUM() verwenden in einer Spalte, und die Berechnung ergibt einen Wert, der außerhalb des Bereichs des Spaltentyps liegt.

Beispiel für den Fehler

Hier ist ein Codebeispiel, das den Fehler erzeugt:

SELECT SUM(bank_balance) 
FROM accounts;

Ergebnis:

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

In diesem Fall habe ich den SUM() verwendet Funktion, um die Summe des bank_balance zu erhalten Spalte, die den Datentyp int hat .

Der Fehler ist aufgetreten, weil das Ergebnis der Berechnung außerhalb des Bereichs von int liegt Datentyp.

Hier sind alle Daten in meiner Tabelle:

SELECT bank_balance 
FROM accounts;

Ergebnis:

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

Das sind einige große Bankguthaben … und die Addition der drei ergibt eine größere Zahl als ein int verarbeiten kann (die int Bereich ist -2.147.483.648 bis 2.147.483.647).

Die Lösung

Wir können diesen Fehler beheben, indem wir int umwandeln Spalte zu einem bigint wenn wir die Abfrage ausführen:

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

Ergebnis:

3300500000

Diesmal hat es geklappt.

Sie könnten auch den Datentyp der aktuellen Spalte für eine dauerhaftere Lösung ändern.

Falls Sie sich fragen, die bigint Bereich ist -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807.

Gleicher Fehler in verschiedenen Szenarien

Derselbe Fehler (Msg 8115) kann auch auftreten (mit einer etwas anderen Fehlermeldung), wenn Sie versuchen, explizit zwischen Datentypen zu konvertieren, und der ursprüngliche Wert außerhalb des Bereichs des neuen Typs liegt. Siehe „Arithmetischer Überlauffehler beim Konvertieren von int in den numerischen Datentyp“ in SQL Server beheben, um dies zu beheben.

Derselbe Fehler (Msg 8115) kann auch auftreten (mit einer etwas anderen Fehlermeldung), wenn Sie versuchen, Daten in eine Tabelle einzufügen, deren IDENTITY Spalte hat das Limit ihres Datentyps erreicht. Siehe Fix:„Arithmetischer Überlauffehler beim Konvertieren von IDENTITY to data type…“ in SQL Server, um dies zu beheben.