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.