sql >> Database >  >> RDS >> Sqlserver

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

Als u een fout ontvangt Msg 8115, Level 16, rekenkundige overloopfout bij het converteren naar datatype numeriek in SQL Server is dit waarschijnlijk omdat u een bewerking uitvoert die resulteert in een gegevensconversiefout vanwege een waarde die buiten het bereik ligt.

Dit gebeurt vaak wanneer u een getal naar een ander gegevenstype probeert te converteren, maar het buiten het geaccepteerde bereik voor het nieuwe gegevenstype valt.

Voorbeeld van de fout

Hier is een voorbeeld van code die de fout veroorzaakt:

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

Resultaat:

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

In dit geval probeerde ik een geheel getal naar een decimaal te converteren.

Maar mijn fout is dat ik alleen een precisie van 3 toestond voor de resulterende decimale waarde. Deze precisie is niet voldoende voor de waarde die door deze bewerking zou worden geproduceerd (die 275.00 zou zijn) ).

De oplossing

Het probleem is eenvoudig op te lossen:

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

Resultaat:

275.00

Het enige wat ik deed was het precisieargument verhogen tot een meer voldoende waarde.

Ik heb het specifiek verhoogd van 3 tot 5 .

Als ik verwachtte dat grotere gehele getallen door zouden komen (bijvoorbeeld als het gehele getal in een databasekolom stond), dan zou ik de precisie moeten verhogen zodat het de grotere waarden aankan.

Voor alle duidelijkheid:precisie is het maximale totale aantal decimale cijfers dat moet worden opgeslagen. Dit getal omvat zowel de linker- als de rechterkant van de komma. De precisie moet een waarde zijn van 1 door de maximale precisie van 38 . De standaardprecisie is 18 .

Dezelfde fout in verschillende scenario's

Dezelfde fout (bericht 8115) kan optreden (met een iets andere foutmelding) wanneer u een functie gebruikt zoals SUM() op een kolom en de berekening resulteert in een waarde die buiten het bereik van het kolomtype ligt. Zie "Rekenkundige overloopfout bij het converteren van expressie naar gegevenstype int" in SQL Server repareren om dit op te lossen.

En dezelfde fout (bericht 8115) kan ook optreden (met een iets andere foutmelding) 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. Verstuur e-mail met bijlagen in Oracle D2k, Oracle Forms 10g, Oracle Forms 6i

  2. Live migraties met MySQL-replicatie

  3. mysql-equivalente gegevenstypen

  4. Hoe to_timestamp() werkt in PostgreSQL