SQL – 安全地将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 (编辑:开发网_商丘站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 存储过程和OPTIMIZE FOR UNKNOWN
- sql-server – SQLCMD命令无法插入重音符
- 用845D的价格购买845E的产品,主板也疯狂!
- 数据库设计 – 在SQL中实现与多个参与约束的多对多关系
- sql-server-2005 – 如何在SQL Server 2005中撤消删除操作?
- sql-server – 在负载下插入性能增加:为什么?
- 体彩(福彩)选号缩水过滤
- 企业进行线上采购管理具体会有什么好处呢?
- 后缀:错误:打开数据库/etc/postfix/generic.db:没有这样
- sql-server-2008 – 参数嗅探与VARIABLES vs重新编译vs OPT