SQL - безопасно понижать BIGINT до INT

У меня есть CSV, который я импортирую в наш база данных. Один из «столбцов» содержит данные, которые должны быть INT, но некоторые строки имеют числа, которые попадают только в диапазон BIGINT (потому что это тестовые данные от одного из наших партнеров). Мы храним INT внутренне и не хочу ничего менять.

Я хочу безопасно выполнить понижающее преобразование с BIGINT до INT. Под безопасностью я подразумеваю, что в случае арифметического переполнения не должно возникать никаких ошибок. Если приведение / преобразование прошло успешно, я хочу, чтобы мой скрипт пошел on. Если это не удается, я хочу, чтобы он замкнулся. Кажется, я не могу понять правильный синтаксис. Вот что у меня есть:

DECLARE @UserIDBigInt BIGINT = 9723021913; -- actually provided by query param
--Setting within the INT range successfully converts
--SET @UserIDBigInt = 5;
DECLARE @UserID INT = CONVERT(INT, @UserIDBigInt);
--DECLARE @UserID INT = CAST(@UserIDBigInt AS INT);
SELECT @UserIDBigInt
SELECT @UserID
IF @UserID IS NOT NULL BEGIN
    SELECT 'Handle it as reliable data'
END

Я подумал о сравнении @UserIDBigInt с допустимым диапазоном INT (-2 ^ 31 (-2 147 483 648) до 2 ^ 31-1 (2 147 483 647)), но мне действительно не нравится такой подход. Это мой запасной вариант. Я надеялся на некоторые языковые конструкции или встроенную фу функции, которые я мог бы использовать. Если мне абсолютно необходимо сравнить с допустимым диапазоном, есть ли хотя бы некоторые встроенные константы (например, int.MinValue и int.MaxValue в C #)?

EDIT : исправленная опечатка.

10
задан Olson.dev 18 August 2011 в 00:46
поделиться