SQLServer中bigint转int带符号时报错问题解决方法
2023-06-13 09:15:45 时间
有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。
现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供在线报表使用。
状态分了3个级别:正常(0)、警告(1)、异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了,
问题是再将bigint转为int时获取原始状态值时,SQLServer报错了:
消息8115,级别16,状态2,第1行
将expression转换为数据类型int时出现算术溢出错误。
因为状态码中已经用到了0x80000000,出现了符号位的问题。
写了一个转换函数解决了。
CREATEFUNCTION[dbo].[BigintToInt] ( @Valuebigint ) RETURNSint AS BEGIN --是否有int符号位 IF@Value&0x80000000<>0RETURN@Value&0xFFFFFFFF|0xFFFFFFFF00000000 --无符号位 RETURN@Value&0xFFFFFFFF END
相关文章
- 事务SQL Server中解决并发事务的方法(sqlserver并发)
- SQLServer 数据库常见问题:锁表原因和解决方法(sqlserver锁表)
- 连接利用SQLServer实现远程连接(sqlserver远程)
- 轻松掌握SQLServer拼接字符串的方法(sqlserver拼接字符串)
- 学习如何管理SQLServer实例的运行与维护(实例 sqlserver)
- SQL Server中列合并的方法介绍(列合并sqlserver)
- SQLServer安全加密方法详解(sqlserver加密函数)
- 使用SQLServer驱动JAR解决数据库连接问题(sqlserver驱动jar)
- 解决SQLServer数据锁定问题(sqlserver锁数据)
- 解决SQLServer中断连接问题(sqlserver重连)
- 使用SQLServer查询数据的挫折─查询速度缓慢的痛苦折磨(sqlserver读取慢)
- 利用SQLServer分析表的有效方法(sqlserver表分析)
- 解决SQLServer表丢失的简易方法(sqlserver表丢失)
- 查询基于SQLServer的联表查询技术实战(sqlserver联表)
- SQLServer深度编译实践:打造高效数据库(sqlserver 编译)
- 优雅掌握SQLServer非常有用的方法(sqlserver的方法)
- 优化SqlServer分页查询的优化方法(sqlserver的分页)
- 使用SQLServer函数实现获取丰富信息的方法(sqlserver的函数)
- SqlServer如何找回丢失的表?(sqlserver找回表)
- 如何快速有效地对SQLServer进行扩容(sqlserver 扩容)
- 恢复数据:使用SQLServer回滚点(sqlserver回滚点)
- SQLServer唯一行: 唯一性实现数据准确性(sqlserver唯一行)