我有一个带有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类型。我想避免这种解决方案,因为实际上这个查询是一个更大更复杂的存储过程的一部分,它涉及从这些值获取的多个表。 谢谢。
答案 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