es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hasta donde tengo conocimiento, no hay forma de forzar la agregación SUM en int y bigint para permitir explícitamente el desbordamiento. Cualquier desbordamiento en int y bigint lanzará un error de “desbordamiento aritmético”. La única forma de evitar este problema es utilizar un tipo de datos con mayor precisión, como decimal, que puede manejar números más grandes sin errores de desbordamiento. Sin embargo, usar decimal 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.

Comments are closed.