SQLServer中bigint轉int帶符號時報錯成績處理辦法。本站提示廣大學習愛好者:(SQLServer中bigint轉int帶符號時報錯成績處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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