¿Puede la función de agregación SUM de SQL Server permitir explícitamente el desbordamiento en los tipos de datos `int` y `bigint`?
¿Existe alguna manera de forzar las agregaciones SUM en int
y bigint
para permitir explícitamente el desbordamiento?
Es decir, ¿existe alguna manera de hacer que las consultas a continuación devuelvan -2147483648 y -9223372036854775808 respectivamente, en lugar de generar un error de “desbordamiento aritmético”?
select SUM(x) as sumx
from (
select 2147483647 as x
union select 1 as x) a;
select SUM(x) as sumx
from (
select cast(9223372036854775807 as bigint) as x
union select 1 as x) a;
Intenté utilizar SET ARITHABORT OFF; y SET ANSI_WARNINGS OFF;, pero eso me devuelve NULL en lugar de un número, así que eso no parece ayudar.
davy.ai
Hasta donde tengo conocimiento, no hay forma de forzar la agregación SUM en
int
ybigint
para permitir explícitamente el desbordamiento. Cualquier desbordamiento enint
ybigint
lanzará un error de “desbordamiento aritmético”. La única forma de evitar este problema es utilizar un tipo de datos con mayor precisión, comodecimal
, que puede manejar números más grandes sin errores de desbordamiento. Sin embargo, usardecimal
puede no ser adecuado para todos los escenarios, ya que conlleva un costo de rendimiento y requisitos de almacenamiento. Por lo tanto, es esencial elegir el tipo de datos apropiado en función de los requisitos comerciales y las características de los datos.