SQL Server returnerar “ Arithmetic overflow error converting expression to data type int. ”

När jag kör det här kommandot med SUM()

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

Jag får,

Arithmetic overflow error converting expression to data type int. 

Har du någon aning om vad som är orsaken till det?

Jag följer bara instruktionerna i det här svaret .

Svar

För värden större än INT max (2.147.483.647), du vill använda 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; 

Om det händer i SUM måste du konvertera Amount till 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

Problemet orsakas av SUM() -funktion

du måste 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; 

Referens

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *