Når jeg kjører denne kommandoen 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.
Noen ideer om hva som er årsaken til det?
Jeg følger bare instruksjonene i dette svaret .
Svar
For verdier som er større enn INT
maks (2.147.483.647), du vil bruke 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 skjer i SUM
, må 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 problemet er forårsaket av SUM()
-funksjon
du må 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;
Referanse