SQL 条件语句添加两个大的 int 值

SQL case statement with condition adding two large int values

我有一个包含 case 语句的 sql 查询。 case 语句有一个条件,将两个整数值相加并验证它们的总和是否小于 sql 允许的最大整数值(为简单起见在示例中四舍五入)beee,然后再将其分配回另一个 int 类型变量。 问题是,在将两个值相加的 WHEN 语句中,由于总和值大于 sql 最大允许整数,因此整个语句会抛出 sql 算术异常。当添加两个整数值时,我在内部假设总和值被放置在一个临时整数变量中...... 例如,

Declare @int1 as Int =2147483598
Declare @int2 as Int =2147483598
Declare @int3 as Int =0
DECLARE @MaxIntValue INT = 2147483600

set @int3 = (CASE WHEN (@int1 < 2)
                    THEN @int1 
                  WHEN ((@int1 + @int2) < @MaxIntValue)
                    THEN @int1 + @int2
                  ELSE @int1
            END)
select @int3 

我找到了解决方法,如果我将其中一个变量的类型改为 bigint (即

Declare @int1 as bigint =2147483598

) 问题已解决,因为我再次假设用于在内部保存总和值的变量的数据类型现在也更改为 bigint 类型。我想避免这种解决方案,因为实际上这个查询是一个更大更复杂的存储过程的一部分,它涉及从中获取这些值的多个表。 谢谢。

尝试转换为 bigint

Declare @int1 as Int =2147483598
Declare @int2 as Int =2147483598
DECLARE @MaxIntValue BIGINT = 2147483600
                     ^^^^^^
set @int3 = (CASE WHEN (@int1 < 2)
                  THEN @int1 
                  WHEN ((CAST(@int1 AS bigint) +   
                         CAST(@int2 AS bigint)) < @MaxIntValue)
                  THEN @int1 + @int2
                  ELSE @int1
             END);
select @int3