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

时间:2016-12-02 02:10:09

标签: sql int case bigint

我有一个带有case语句的SQL查询。 case语句有一个条件,它添加两个整数值并验证它们的总和小于sql允许的最大整数值(为了简单起见,在示例中为圆形),然后将它分配回另一个int类型变量。 问题是,在WHEN语句中添加了两个值,因为sum值大于sql max允许的整数,整个语句抛出一个sql算术异常。我在内部ASSUMING,当添加两个整数值时,sum值被放在一个临时整数变量中... 例如,

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

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

1 个答案:

答案 0 :(得分:1)

尝试转换为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