我在SQLServer中做了一些操作。并且遇到了着名的“算术溢出”错误。情况是,我希望它溢出。如何告诉它允许溢出并忽略错误?
我正在做这个选择:
SELECT CONVERT(bigint, 0x8000000000000000)-1
我希望这返回9223372036854775807(最大的bigint),但它会返回:
Arithmetic overflow error converting expression to data type bigint.
答案 0 :(得分:4)
这个怎么样:
SET ARITHABORT OFF;
SET ARITHIGNORE ON;
SET ANSI_WARNINGS OFF;
SELECT ISNULL(CONVERT(bigint, 0x8000000000000000)-1, 9223372036854775807)
上的MSDN参考
答案 1 :(得分:0)
特定的表达式失败,因为-1是int&所以你需要;
select CONVERT(bigint, 0x8000000000000000)-CONVERT(bigint, -1)
-9223372036854775807
但这不是最小值(因为-1)或最大值;如果你想要+ ve最大值;
select CONVERT(bigint, 0x7FFFFFFFFFFFFFFF)
9223372036854775807