小编典典

SQL-安全地将BIGINT转换为INT

sql

我有一个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))进行比较,但是我真的不喜欢这种方法。那是我的后备。我希望可以使用一些语言构造或内置函数。如果我绝对必须比较有效范围,是否至少有一些内置常量(例如C#的int.MinValue和int.MaxValue)?

编辑 :改正错别字。


阅读 487

收藏
2021-05-05

共1个答案

小编典典

将它们添加到您的脚本中:

SET ARITHABORT OFF;
SET ARITHIGNORE ON;

这会将所有溢出值转换为NULL。

此处的更多信息:http :
//msdn.microsoft.com/en-
us/library/ms184341.aspx

2021-05-05