O SQL Server retorna “ Erro de estouro aritmético ao converter a expressão para o tipo de dados int. ”

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *