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

日期:2020-05-07编辑作者:数据库

www.129028.com金沙,有一个需求是要在一个云监控的状态值中存储多个状态使用了位运算机制在一个int型中存储。

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

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

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

因为状态码中已经用到了 0x80000000, 出现了符号位的问题。写了一个转换函数解决了。

CREATE FUNCTION [dbo].[BigintToInt]( @Value bigint )RETURNS intASBEGIN -- 是否有int符号位 IF @Value & 0x80000000  0 RETURN @Value & 0xFFFFFFFF | 0xFFFFFFFF00000000 -- 无符号位 RETURN @Value & 0xFFFFFFFFEND

本文由www.129028.com金沙发布于数据库,转载请注明出处:一个函数解决SQLServer中bigint 转 int带符号时报错问题

关键词:

Sql Server中的非聚集索引详细介

这篇我们来解开神秘面纱。 3:通过最后的槽位列表,可以得知173号索引页上存放着8条索引记录。 复制代码 代码如下...

详细>>

必须会的SQL语句(一) 创建数据库与删除数据库【www.129028.com金沙

1.创建数据库 drop命令用于删除数据库。 Create database 名称on primary{ name ='名称', filename ='c:xx名称.mdf', size = 10mb, --数据库...

详细>>

SqlServer提示“列前缀tempdb.无效: 未指定表名”问题解决方案www

在查询凭证、审核凭证时出现“列前缀tempdb.无效:未指定表名”的错误提示,怎么解决? 本文我们总结了几个在安装...

详细>>

【www.129028.com金沙】SQL Server中将查询结果转换为Json格式脚本分享

脚本源码: 复制代码 代码如下:SET ANSI_NULLS ONGOSETQUOTED_IDENTIFIER ONGOCREATEPROCEDURE[dbo].[SerializeJSON](@ParameterSQL ASVARCHAR(MAX)...

详细>>