Игнорировать арифметическое переполнение в Microsoft SQL Server - PullRequest
1 голос
/ 23 января 2012

Я делаю некоторые битовые манипуляции в SQLServer.И столкнулись со знаменитой ошибкой «Арифметическое переполнение».Дело в том, что я хочу, чтобы оно переполнилось.Как я могу сказать, чтобы разрешить переполнение и игнорировать ошибку?

Я делаю этот выбор:

SELECT CONVERT(bigint, 0x8000000000000000)-1

Я хочу, чтобы это вернуло 9223372036854775807 (самый большой bigint), но это возвращает:

Arithmetic overflow error converting expression to data type bigint.

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Как насчет этого:

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

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

См. Ссылки MSDN в ARITHIGNORE и ARITHABORT

0 голосов
/ 23 января 2012

Это определенное выражение завершается ошибкой, потому что -1 - это целое число, поэтому вам нужно;

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

, но это не минимум (из-за -1) или максимум;если вы хотите максимум + ve;

select CONVERT(bigint, 0x7FFFFFFFFFFFFFFF)
9223372036854775807
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...