SQL Server:WHERE条件中表达式转换为int类型时算术溢出错误的解决咨询
解决SQL Server中WHERE条件的算术溢出问题
这个坑我之前也踩过!你遇到的问题根源在于运算顺序:当你写cast(@id + 1000 as bigint)时,SQL Server会先执行@id + 1000的运算,而@id是int类型(最大值2147483647),加1000直接超过了int的上限,这时候已经触发算术溢出错误了,后续的cast根本没机会生效。
正确的做法是先把@id转换为bigint类型,再进行加法运算,这样整个加法过程会在bigint的范围内执行,就不会溢出了。给你两种可行的写法:
用
cast的写法:select * from orders where orderid > @id and orderid < cast(@id as bigint) + 1000用
convert的写法(和cast效果一致,只是语法不同):select * from orders where orderid > @id and orderid < convert(bigint, @id) + 1000
原理很简单:先把int类型的@id升级为bigint,再加上1000,得到的结果2147484647完全在bigint的取值范围内(bigint的上限是9223372036854775807),自然不会触发溢出错误。
如果你的场景允许,也可以直接把@id的变量类型定义为bigint,从根源上避免这类问题,但如果变量类型没法修改,上面的写法就完全可以解决问题。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

