網(wǎng)站首頁 編程語言 正文
一、SQLServer數(shù)據(jù)庫引擎錯誤
1、查詢系統(tǒng)錯誤信息
SQLServer在每個數(shù)據(jù)庫的系統(tǒng)視圖sys.messages中存儲系統(tǒng)自定義(Message_id <= 50000)和用戶自定義(Message_id>50000)錯誤消息。
2、系統(tǒng)錯誤信息的嚴(yán)重性級別
得到的系統(tǒng)錯誤消息分為不同程度的嚴(yán)重性級別。嚴(yán)重性級別是通過數(shù)字來表示的,數(shù)字越小表示嚴(yán)重級別越低。反之則嚴(yán)重性越高。嚴(yán)重性較高的錯誤指示需要盡快解決問題。
二、用try...catch發(fā)現(xiàn)錯誤
try...catch結(jié)構(gòu)
begin try
要執(zhí)行的T-SQL代碼,一旦錯誤將傳遞給catch塊進行處理
end try
begin catch
檢索和處理錯誤信息的代碼
end catch
正常執(zhí)行的T-SQL語句
- try:其中,try塊是包含在begin try和end try之間的T-SQL代碼段,在該代碼段中一旦發(fā)生錯誤將傳遞給catch塊,如果沒有錯誤將直接執(zhí)行catch塊后面的代碼。
- catch:catch塊是包含在begin catch和end catch之間的T-SQL代碼段,在該代碼段中檢索和處理try塊中的錯誤信息。
三、捕獲錯誤的系統(tǒng)函數(shù)
- error_number()
返回錯誤的ID號,對應(yīng)sys.messages系統(tǒng)視圖中的message_id字段。 - error_line()
返回T-SQL代碼中錯誤出現(xiàn)的語句行數(shù)。 - error_message()
返回將返回給應(yīng)用程序的消息文本。該文本包括為所有可替換參數(shù)提供的值,如長度、對象名或時間。對應(yīng)sys.messages系統(tǒng)視圖中的text字段。 - error_procedure()
返回出現(xiàn)錯誤的存儲過程或觸發(fā)器名稱。如果在存儲過程或觸發(fā)器中未出現(xiàn)錯誤,該函數(shù)返回NULL。 - error_severity()
返回錯誤的嚴(yán)重性級別。對應(yīng)sys.messages系統(tǒng)視圖中的severity字段。 - error_state()
返回狀態(tài)
?示例:
begin try
select 1/0
end try
begin catch
select
error_number() as 'number',
error_line() as 'line',
error_message() as 'message',
error_severity() as 'severity',
error_state() as 'state'
end catch
輸出結(jié)果如圖所示:
四、用@@ERROR捕獲上一條語句的錯誤
T-SQL還提供了一個簡單的系統(tǒng)函數(shù)@@ERROR來捕獲上一條語句的錯誤。如果上一條語句執(zhí)行成功。@@ERROR系統(tǒng)函數(shù)將返回0;如果上一條語句生成錯誤,@@ERROR將返回錯誤號。
每條語句完成時@@ERROR都會更改。
例如:
select 1/0
select * from sys.messages where message_id = @@error and language_id = 2052
?結(jié)果如圖:
五、用RAISERROR反饋錯誤
功能:
將生成的SQLServer引擎錯誤或警告信息(從sys.messages系統(tǒng)視圖獲得)反饋到應(yīng)用程序中。sys.messages系統(tǒng)視圖中由SQLServer自身定義的信息,其message_id列的值小于等于5000。
返回用戶使用存儲過程sp_addmessage創(chuàng)建的自定義消息(存儲在系統(tǒng)視圖sys.messages中,其message_id大于50000)。
與print語句的區(qū)別:
print語句是T-SQL提供的用于反饋信息的語句,print語句只能反饋字符串或字符串表達式的值。
raiserror語句除了print語句的功能外,還支持類似C語言仲printf函數(shù)的字符串替換功能。這樣可以先在字符串中定義要替換的數(shù)據(jù)的類型和位置,在輸出時自動將字符串內(nèi)容進行替換。
語法:
raiserror({ msg_id | msg_str | @local_variable })
{ ,severity,state }
[ ,argument [ ,...n ] ] )
[ with option [,...n] ]
參數(shù)說明:
- msg_id:存儲在sys.messages系統(tǒng)視圖中的錯誤消息號(message_id)。如果是用戶使用as_addmessage系統(tǒng)存儲過程自定義的錯誤消息,其錯誤號應(yīng)當(dāng)大于50000.如果未指定msg_id,則返回一個錯誤號為50000的錯誤消息。
- msg_str:用戶自定義消息,msg_str是一個字符串,具有可選的嵌入轉(zhuǎn)換規(guī)格。每個轉(zhuǎn)換規(guī)格都會定義參數(shù)列表中的值。如何格式化并將其置于msg_str中轉(zhuǎn)換規(guī)格位置上的字段中,轉(zhuǎn)換規(guī)格的格式如下:%[[flag][width][.precision][{h|1}]]type。
- @local_variable:包含按照msg_str的方式格式化的字符串的任何有效字符串?dāng)?shù)據(jù)類型的變量。@local_variable的數(shù)據(jù)類型必須為char或varchar,或者必須能夠隱式轉(zhuǎn)換為這些數(shù)據(jù)類型。
- severity:用戶定義的與該消息關(guān)聯(lián)的嚴(yán)重級別。當(dāng)使用msg_id引發(fā)使用sp_addmessage創(chuàng)建的用戶定義消息時,paiserror上指定的嚴(yán)重性將覆蓋sp_addmessage中指定的嚴(yán)重性。
- state:狀態(tài)號,1至少127之間的任意整數(shù)。如果在多個位置引發(fā)相同的用戶自定義錯誤,則針對每個位置使用唯一的狀態(tài)好有助于找到引發(fā)錯誤的代碼段。
- argument:用于代替msg_str或?qū)?yīng)于msg_id的消息中的定義的變量的參數(shù)。可以有0個或多個替代參數(shù),但是替代參數(shù)的總數(shù)不能超過20個。
- option:錯誤的自定義選項。LOG:在SQLServer數(shù)據(jù)庫引擎實例的錯誤日志和應(yīng)用程序日志中記錄錯誤;NOWAIT:將消息立即發(fā)送給客戶端;SETERROR:將@@ERROR值和ERROR_NUMBER值設(shè)置為msg_id或50000,不用考慮嚴(yán)重級別。
原文鏈接:https://www.cnblogs.com/springsnow/p/9881177.html
相關(guān)推薦
- 2022-07-03 C#列表List<T>、HashSet和只讀集合介紹_C#教程
- 2022-08-14 Redis+Caffeine兩級緩存的實現(xiàn)_Redis
- 2022-06-18 Asp.Net?Core配置多環(huán)境log4net配置文件的全過程_實用技巧
- 2022-05-06 pycharm使用sftp同步服務(wù)器的步驟_python
- 2022-11-28 golang進程在docker中OOM后hang住問題解析_Golang
- 2022-10-17 docker?compose運行微服務(wù)項目的方法_docker
- 2022-05-26 flutter底部彈出BottomSheet詳解_Android
- 2023-05-30 docker如何查看容器啟動命令(已運行的容器)_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支