У меня есть CSV, который я импортирую в нашу базу данных.Один из «столбцов» содержит данные, которые должны быть INT, но некоторые строки имеют числа, которые попадают только в диапазон BIGINT (потому что это тестовые данные от одного из наших партнеров).Мы храним INT внутренне и не хотим менять.
Я хочу безопасно снизить рейтинг BIGINT до INT.Под «безопасным» я подразумеваю, что в случае арифметического переполнения не должно возникать ошибок.Если приведение / преобразование выполнено успешно, я хочу, чтобы мой сценарий продолжался.Если это не удается, я хочу, чтобы оно замкнуло.Я не могу понять правильный синтаксис.Вот что у меня есть:
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 : исправлена опечатка.