SQL Server returnerer “ Aritmetisk overløbsfejl ved konvertering af udtryk til datatype int. ”

Når jeg kører denne kommando med SUM()

SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Jeg får,

Arithmetic overflow error converting expression to data type int. 

En idé om, hvad der er årsagen til det?

Jeg følger bare instruktionerne i dette svar .

Svar

For værdier, der er større end INT maks (2.147.483.647), du vil bruge COUNT_BIG (*).

SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Hvis det sker i SUM, skal du konvertere Amount til en BIGINT.

SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Svar

Dette problem er forårsaget af SUM() funktion

du skal CAST t.Amount som BIGINT

SELECT COUNT(*) AS [Records], SUM(CAST(t.Amount AS BIGINT)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Reference

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *