Quando executo este comando com SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Estou recebendo,
Arithmetic overflow error converting expression to data type int.
Alguma idéia de qual é a causa disso?
Estou apenas seguindo as instruções em esta resposta .
Resposta
Para valores maiores do que INT
max (2.147.483.647), você “desejará usar 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;
Se estiver acontecendo em SUM
, você precisará converter Amount
em 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;
Resposta
Este problema é causado por SUM()
função
você deve CAST t.Amount
como 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;
Referência