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

„Arithmetischer Überlauffehler beim Konvertieren von int in den Datentyp numerisch“ in SQL Server behoben

Wenn Sie den Fehler Msg 8115, Level 16, Arithmetic overflow error converting int to data type numeric erhalten In SQL Server liegt dies wahrscheinlich daran, dass Sie einen Vorgang ausführen, der aufgrund eines Wertes außerhalb des zulässigen Bereichs zu einem Datenkonvertierungsfehler führt.

Dies geschieht häufig, wenn Sie versuchen, eine Zahl in einen anderen Datentyp zu konvertieren, diese jedoch außerhalb des zulässigen Bereichs für den neuen Datentyp liegt.

Beispiel für den Fehler

Hier ist ein Codebeispiel, das den Fehler erzeugt:

SELECT CAST(275 AS DECIMAL(3, 2));

Ergebnis:

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

In diesem Fall habe ich versucht, eine Ganzzahl in eine Dezimalzahl umzuwandeln.

Aber mein Fehler ist, dass ich für den resultierenden Dezimalwert nur eine Genauigkeit von 3 zugelassen habe. Diese Genauigkeit reicht nicht für den Wert aus, der durch diese Operation erzeugt würde (was 275.00 wäre ).

Die Lösung

Das Problem lässt sich leicht beheben:

SELECT CAST(275 AS DECIMAL(5, 2));

Ergebnis:

275.00

Ich habe lediglich das Präzisionsargument auf einen ausreichenderen Wert erhöht.

Insbesondere habe ich es von 3 erhöht bis 5 .

Wenn ich erwartet hätte, dass größere Ganzzahlen durchkommen (zum Beispiel, wenn sich die Ganzzahl in einer Datenbankspalte befindet), müsste ich die Genauigkeit erhöhen, damit sie die größeren Werte verarbeiten kann.

Nur um es klar zu sagen, Genauigkeit ist die maximale Gesamtzahl der zu speichernden Dezimalstellen. Diese Zahl umfasst sowohl die linke als auch die rechte Seite des Dezimalpunkts. Die Genauigkeit muss ein Wert ab 1 sein durch die maximale Genauigkeit von 38 . Die Standardpräzision ist 18 .

Gleicher Fehler in verschiedenen Szenarien

Derselbe Fehler (Msg 8115) kann auftreten (mit einer etwas anderen Fehlermeldung), wenn Sie eine Funktion wie SUM() verwenden in einer Spalte, und die Berechnung ergibt einen Wert, der außerhalb des Bereichs des Spaltentyps liegt. Siehe „Arithmetischer Überlauffehler beim Konvertieren des Ausdrucks in den Datentyp int“ 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.