分享一个SQLServer中bigint转int带符号时报错的解决函数【干货】

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。

现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供在线报表使用。
状态分了3个级别:正常(0)、警告(1)、异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了,

问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了:

消息 8115,级别 16,状态 2,第 1 行
将 expression 转换为数据类型 int 时出现算术溢出错误。

因为状态码中已经用到了 0x80000000, 出现了符号位的问题。

写了一个转换函数解决了。

 代码如下 复制代码
CREATE FUNCTION [dbo].[BigintToInt]
(
   @Value bigint 
)
RETURNS int
AS
BEGIN
   -- 是否有int符号位
   IF @Value & 0x80000000 <> 0 RETURN @Value & 0xFFFFFFFF | 0xFFFFFFFF00000000
   -- 无符号位
   RETURN @Value & 0xFFFFFFFF
END
时间: 2025-01-08 14:30:59

分享一个SQLServer中bigint转int带符号时报错的解决函数【干货】的相关文章

一个函数解决SQLServer中bigint 转 int带符号时报错问题_MsSql

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常.警告状态)使用了位运算机制在一个int型中存储. 现在监控日志数据量非常大(亿级别)需要对数据按每小时.每天进行聚合,供在线报表使用. 状态分了3个级别:正常(0).警告(1).异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了, 问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态

一个函数解决SQLServer中bigint 转 int带符号时报错问题

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常.警告状态)使用了位运算机制在一个int型中存储. 现在监控日志数据量非常大(亿级别)需要对数据按每小时.每天进行聚合,供在线报表使用. 状态分了3个级别:正常(0).警告(1).异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了, 问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态

SQLServer中bigint转int带符号时报错问题解决方法_MsSql

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常.警告状态)使用了位运算机制在一个int型中存储. 现在监控日志数据量非常大(亿级别)需要对数据按每小时.每天进行聚合,供在线报表使用. 状态分了3个级别:正常(0).警告(1).异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了, 问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态

SQLServer中bigint转int带符号时报错问题解决方法

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常.警告状态)使用了位运算机制在一个int型中存储. 现在监控日志数据量非常大(亿级别)需要对数据按每小时.每天进行聚合,供在线报表使用. 状态分了3个级别:正常(0).警告(1).异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了, 问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态

分享一个SQLSERVER脚本

原文:分享一个SQLSERVER脚本 分享一个SQLSERVER脚本 很多时候我们都需要计算数据库中各个表的数据量很每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , rowsinfo BIGINT , reserved VARCHAR(20) , datainfo VARCHAR(20) , index_size VARCHAR(20) , unused VARCHAR(20) ) DECLARE @

我的一个SSH简单整合,启动tomcat时报错,如error文档内容所示,请教指点

问题描述 我的一个SSH简单整合,启动tomcat时报错,如:error文档 内容所示,请教指点,项目源代码及项目结构图都在压缩包中,随时等候佳音,谢谢了-- 解决方案 你的UesrBean.hbm.xml的路径写错了不是<class name="com.bean.UserBean" table="users">而是<class name="com.bean.user.UserBean" table="users&qu

cspace-在安装CSpace过程中,下载solr服务器时报错

问题描述 在安装CSpace过程中,下载solr服务器时报错 在cmd中运行mvn package之后报错: [ERROR] Failed to execute goal on project solr: Could not resolve dependencies for project org.dspace.modules:solr:war:2.0.0: Failure to find org.carrot2:carrot2-mini:jar:3.1.0 in http://mirrors.

高手!问一下 在地址栏里最后一个字母后输入/的时候 为什么报错 怎么解决??

问题描述 高手!问一下在地址栏里最后一个字母后输入/的时候为什么报错怎么解决??我试过sina是提取一个错误页面来解决的 解决方案 解决方案二:输入/表示一个目录,你的目录存在吗解决方案三:不存在解决方案四:大家可以看看263.com和sina.com.cn的区别解决方案五:是目录可以加/,文件后就不行解决方案六:判断接受的值是否是正常的数据类型,和是否存在此参数,已知错误处理或者用asp.net错误处理机制.解决方案七:首先您怎么判断它是从地址栏传过来的?我想要的效果和263.com一样加上/

分享一个批量增加和移除用户对表的操作权限函数

最近一直有人在QQ群询问怎么设置一个用户对所有表的读权限等有关一次性对数据库或某个模式下所有表增加或移除某一个权限问题 1.对于数据库的所有表需要分多条grant 语句来实现 2.对于某一个模式下的所有表,9.0以前版本也只能通过多条grant语句来实现,而9.0以后则可以通过GRANT xxx ON ALL TABLES IN SCHEMA xxx TO xxx 来实现 3.revoke跟grant情况一下 其实这些我们可以通行守加几个管理函数来实现,封装一下,操作起来不管那个版本都是一样的