SQL Server devuelve “ Error de desbordamiento aritmético al convertir la expresión al tipo de datos int. ”

Cuando ejecuto este comando con SUM()

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

Estoy obteniendo,

Arithmetic overflow error converting expression to data type int. 

¿Alguna idea de cuál es la causa?

Simplemente sigo las instrucciones en esta respuesta .

Respuesta

Para valores mayores que INT máx. (2,147,483,647), querrá 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; 

Si está sucediendo en SUM, debe convertir Amount en un 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; 

Respuesta

Este problema es causado por SUM() función

tienes que 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; 

Referencia

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *