一個(gè)函數(shù)解決SQLServer中bigint 轉(zhuǎn) int帶符號時(shí)報(bào)錯(cuò)問題
有一個(gè)需求是要在一個(gè)云監(jiān)控的狀態(tài)值中存儲多個(gè)狀態(tài)(包括可同時(shí)存在的各種異常、警告狀態(tài))使用了位運(yùn)算機(jī)制在一個(gè)int型中存儲。
現(xiàn)在監(jiān)控日志數(shù)據(jù)量非常大(億級別)需要對數(shù)據(jù)按每小時(shí)、每天進(jìn)行聚合,供在線報(bào)表使用。
狀態(tài)分了3個(gè)級別:正常(0)、警告(1)、異常(2),聚合時(shí)需要使用max選擇最差的狀態(tài),就需要對狀態(tài)值進(jìn)行處理加上級別和狀態(tài)位個(gè)數(shù),就要借助bigint型來做運(yùn)算了,
問題是再將bigint 轉(zhuǎn)為 int時(shí)獲取原始狀態(tài)值時(shí),SQLServer報(bào)錯(cuò)了:
消息 8115,級別 16,狀態(tài) 2,第 1 行
將 expression 轉(zhuǎn)換為數(shù)據(jù)類型 int 時(shí)出現(xiàn)算術(shù)溢出錯(cuò)誤。
因?yàn)闋顟B(tài)碼中已經(jīng)用到了 0x80000000, 出現(xiàn)了符號位的問題。
寫了一個(gè)轉(zhuǎn)換函數(shù)解決了。
CREATE FUNCTION [dbo].[BigintToInt] ( @Value bigint ) RETURNS int AS BEGIN -- 是否有int符號位 IF @Value & 0x80000000 <> 0 RETURN @Value & 0xFFFFFFFF | 0xFFFFFFFF00000000 -- 無符號位 RETURN @Value & 0xFFFFFFFF END
- linux mysql 報(bào)錯(cuò):MYSQL:The server quit without updating PID file
- mysql報(bào)錯(cuò):MySQL server version for the right syntax to use near type=InnoDB的解決方法
- SQL Server附加數(shù)據(jù)庫報(bào)錯(cuò)無法打開物理文件,操作系統(tǒng)錯(cuò)誤5的圖文解決教程
- mysql啟動(dòng)報(bào)錯(cuò)MySQL server PID file could not be found
- SQL Server 2005/2008 導(dǎo)入導(dǎo)出數(shù)據(jù)常見報(bào)錯(cuò)解決方法
- SQLServer中bigint轉(zhuǎn)int帶符號時(shí)報(bào)錯(cuò)問題解決方法
- SQL Server2005打開數(shù)據(jù)表中的XML內(nèi)容時(shí)報(bào)錯(cuò)的解決辦法
- SQL Server作業(yè)報(bào)錯(cuò)特殊案例分析
- sql server利用不同語種語言顯示報(bào)錯(cuò)錯(cuò)誤消息的方法示例
相關(guān)文章
SQL?Server數(shù)據(jù)庫備份和恢復(fù)數(shù)據(jù)庫的全過程
最近在功能調(diào)試前需要先將測試數(shù)據(jù)庫備份,然后功能調(diào)試之后再將測試數(shù)據(jù)庫還原,這樣就可以重復(fù)的進(jìn)行功能調(diào)試,這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫備份和恢復(fù)數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2022-06-06
SQL SERVER 開啟CDC 實(shí)操詳細(xì)
這篇文章主要個(gè)代價(jià)介紹SQL SERVER CDC開啟實(shí)操詳細(xì)內(nèi)容,文明芝麻官內(nèi)容有詳細(xì)代碼及解說,需要的小伙伴可以參考一下2021-10-10
記一次公司倉庫數(shù)據(jù)庫服務(wù)器死鎖過程及解決辦法
根據(jù)操作系統(tǒng)中的定義:死鎖是指在一組進(jìn)程中的各個(gè)進(jìn)程均占有不會(huì)釋放的資源,但因互相申請被其他進(jìn)程所站用不會(huì)釋放的資源而處于的一種永久等待狀態(tài)。下面小編給大家分享一次公司倉庫數(shù)據(jù)庫服務(wù)器死鎖過程及解決辦法,需要的朋友一起看看吧2015-09-09
將一個(gè)表中個(gè)某一列修改為自動(dòng)增長的方法
如果表中沒有數(shù)據(jù)可以使用 drop column然后再add column,如果存在一部分?jǐn)?shù)據(jù)可以使用本文提供的第二種解決方法2014-09-09
sql server中隨機(jī)函數(shù)NewID()和Rand()
在SQL語言中,隨機(jī)函數(shù)NEWID和rand()用法并不相同,下面就將為您示例分析這兩個(gè)隨機(jī)函數(shù)的區(qū)別,供您參考,希望對您深入理解SQL函數(shù)能起到作用2015-10-10
SQL Server 存儲過程遇到“表 ''''#TT'''' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯(cuò)誤
這篇文章主要介紹了SQL Server 存儲過程遇到“表 '#TT' 沒有標(biāo)識屬性無法執(zhí)行 SET 操作”錯(cuò)誤 的相關(guān)資料,需要的朋友可以參考下2016-07-07
SQL?Server中實(shí)現(xiàn)錯(cuò)誤處理
這篇文章介紹了SQL?Server中實(shí)現(xiàn)錯(cuò)誤處理的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
列出SQL Server中具有默認(rèn)值的所有字段的語句
上個(gè)星期我在對一個(gè)供應(yīng)商開發(fā)的數(shù)據(jù)庫按規(guī)定進(jìn)行故障排除的時(shí)候,我們需要對他們數(shù)據(jù)庫中50個(gè)表的每一個(gè)都進(jìn)行查看,以確保所有期望是默認(rèn)值的字段都被分配了默認(rèn)值。你可以想象這是一個(gè)多么令人畏懼的工作,而我立即提出了這個(gè)問題。有沒有一個(gè)比在SQL Server管理套件中打開每一個(gè)表來查看這個(gè)schema的更好方法嗎?2008-10-10

