SQL Server vrací “ Chyba přetečení aritmetiky při převodu výrazu na datový typ int. ”

Když spustím tento příkaz s SUM()

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

Dostávám,

Arithmetic overflow error converting expression to data type int. 

Máte představu o tom, co je příčinou?

Řídím se pouze pokyny v tato odpověď .

Odpověď

Pro hodnoty větší než INT max (2 147 483 647), budete chtít použít 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; 

Pokud k tomu dochází v SUM, musíte převést Amount na 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; 

Odpověď

Tento problém je způsoben SUM() funkce

musíte CAST t.Amount jako 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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *