Hvis du modtager fejl Besked 8115, niveau 16, aritmetisk overløbsfejl ved konvertering af int til datatype numerisk i SQL Server er det sandsynligvis, fordi du udfører en handling, der resulterer i en datakonverteringsfejl på grund af en værdi uden for området.
Dette vil ofte ske, når du forsøger at konvertere et tal til en anden datatype, men det er uden for det accepterede interval for den nye datatype.
Eksempel på fejlen
Her er et eksempel på kode, der producerer fejlen:
SELECT CAST(275 AS DECIMAL(3, 2));
Resultat:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
I dette tilfælde forsøgte jeg at konvertere et heltal til en decimal.
Men min fejl er, at jeg kun tillod en præcision på 3 for den resulterende decimalværdi. Denne præcision er ikke tilstrækkelig til den værdi, der ville blive produceret af denne operation (som ville være 275.00
).
Løsningen
Problemet løses nemt:
SELECT CAST(275 AS DECIMAL(5, 2));
Resultat:
275.00
Det eneste, jeg gjorde, var at øge præcisionsargumentet til en mere tilstrækkelig værdi.
Specifikt øgede jeg den fra 3
til 5
.
Hvis jeg forventede, at der skulle komme større heltal igennem (hvis heltalet f.eks. var i en databasekolonne), ville jeg være nødt til at øge præcisionen, så den kunne håndtere de større værdier.
For at være klar er præcision det maksimale samlede antal decimalcifre, der skal gemmes. Dette tal inkluderer både venstre og højre side af decimaltegnet. Præcisionen skal være en værdi fra 1
gennem den maksimale præcision på 38
. Standardpræcisionen er 18
.
Samme fejl i forskellige scenarier
Den samme fejl (Msg 8115) kan opstå (med en lidt anden fejlmeddelelse), når du bruger en funktion såsom SUM()
på en kolonne, og beregningen resulterer i en værdi, der ligger uden for rækkevidden af kolonnens type. Se Ret "Aritmetisk overløbsfejl ved konvertering af udtryk til datatype int" i SQL Server for at rette dette.
Og den samme fejl (Msg 8115) kan også opstå (med en lidt anden fejlmeddelelse), når du forsøger at indsætte data i en tabel, når dens IDENTITY
kolonne har nået sin datatypegrænse. Se Fix:"Aritmetisk overløbsfejl ved konvertering af IDENTITY
til datatype…” i SQL Server for, hvordan du løser dette.