忽略microsoft sql server中的算术溢出

时间:2012-01-23 12:22:30

标签: sql-server tsql

我在SQLServer中做了一些操作。并且遇到了着名的“算术溢出”错误。情况是,我希望它溢出。如何告诉它允许溢出并忽略错误?

我正在做这个选择:

SELECT CONVERT(bigint, 0x8000000000000000)-1

我希望这返回9223372036854775807(最大的bigint),但它会返回:

Arithmetic overflow error converting expression to data type bigint.

2 个答案:

答案 0 :(得分:4)

这个怎么样:

SET ARITHABORT OFF;
SET ARITHIGNORE ON;
SET ANSI_WARNINGS OFF;

SELECT ISNULL(CONVERT(bigint, 0x8000000000000000)-1, 9223372036854775807)

请参阅ARITHIGNOREARITHABORT

上的MSDN参考

答案 1 :(得分:0)

特定的表达式失败,因为-1是int&所以你需要;

select CONVERT(bigint, 0x8000000000000000)-CONVERT(bigint, -1)
-9223372036854775807

但这不是最小值(因为-1)或最大值;如果你想要+ ve最大值;

select CONVERT(bigint, 0x7FFFFFFFFFFFFFFF)
9223372036854775807