加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL – 安全地将BIGINT向下转换为INT

发布时间:2021-03-07 13:17:29 所属栏目:编程 来源:网络整理
导读:我有一个CSV我正在导入我们的数据库.个中一个“列”包括应该是INT的数据,但有些行的数字只能在BIGINT范畴内(由于它们是来自我们的一个搭档的测试数据).我们在内部存储INT,不想改变. 我想安详地从BIGINT转发到INT.安详地,我的意思是假如产生算术溢出,则不该该

我有一个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,647))举办较量,但我真的不喜好这种要领.那是我的后备.我但愿能行使一些说话布局或内置函数.假如我必需与有用范畴举办较量,是否至少有一些内置常量(如C#的int.MinValue& int.MaxValue)?

编辑:更正错字.

办理要领

将这些添加到您的剧本:
SET ARITHABORT OFF;
SET ARITHIGNORE ON;

这会将任何溢出值转换为NULL.

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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读