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