SQL Server 中 RAISERROR 的用法詳細(xì)介紹
SQL Server 中 RAISERROR 的用法
raiserror 的作用: raiserror 是用于拋出一個(gè)錯(cuò)誤。[ 以下資料來源于sql server 2005的幫助 ]
其語法如下:
RAISERROR ( { msg_id | msg_str | @local_variable } { ,severity ,state } [ ,argument [ ,...n ] ] ) [ WITH option [ ,...n ] ]
簡要說明一下:
第一個(gè)參數(shù):{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一個(gè)sys.messages表中定義的消息代號(hào);
使用 sp_addmessage 存儲(chǔ)在 sys.messages 目錄視圖中的用戶定義錯(cuò)誤消息號(hào)。
用戶定義錯(cuò)誤消息的錯(cuò)誤號(hào)應(yīng)當(dāng)大于 50000。
msg_str:表示也可以是一個(gè)用戶定義消息,該錯(cuò)誤消息最長可以有 2047 個(gè)字符;
(如果是常量,請(qǐng)使用N'xxxx',因?yàn)槭莕varchar的)
當(dāng)指定 msg_str 時(shí),RAISERROR 將引發(fā)一個(gè)錯(cuò)誤號(hào)為 5000 的錯(cuò)誤消息。
@local_variable:表示也可以是按照 msg_str 方式的格式化字符串變量。
第二個(gè)參數(shù):severity
用戶定義的與該消息關(guān)聯(lián)的嚴(yán)重級(jí)別。(這個(gè)很重要)
任何用戶都可以指定 0 到 18 之間的嚴(yán)重級(jí)別。
[0,10]的閉區(qū)間內(nèi),不會(huì)跳到catch;
如果是[11,19],則跳到catch;
如果[20,無窮),則直接終止數(shù)據(jù)庫連接;
第三個(gè)參數(shù):state
如果在多個(gè)位置引發(fā)相同的用戶定義錯(cuò)誤,
則針對(duì)每個(gè)位置使用唯一的狀態(tài)號(hào)有助于找到引發(fā)錯(cuò)誤的代碼段。
介于 1 至 127 之間的任意整數(shù)。(state 默認(rèn)值為1)
當(dāng)state 值為 0 或大于 127 時(shí)會(huì)生成錯(cuò)誤!
第四個(gè)參數(shù):argument
用于代替 msg_str 或?qū)?yīng)于 msg_id 的消息中的定義的變量的參數(shù)。
第五個(gè)參數(shù):option
錯(cuò)誤的自定義選項(xiàng),可以是下表中的任一值:
LOG :在錯(cuò)誤日志和應(yīng)用程序日志中記錄錯(cuò)誤;
NOWAIT:將消息立即發(fā)送給客戶端;
SETERROR:將 @@ERROR 值和 ERROR_NUMBER 值設(shè)置為 msg_id 或 50000;
[SQL]代碼示例
--示例1
DECLARE @raiseErrorCode nvarchar(50) SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY) RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)
--示例2
RAISERROR ( N'This is message %s %d.', -- Message text, 10, -- Severity, 1, -- State, N'number', -- First argument. 5 -- Second argument. ); -- The message text returned is: This is message number 5. GO
--示例3
RAISERROR (N'<<%*.*s>>', -- Message text. 10, -- Severity, 1, -- State, 7, -- First argument used for width. 3, -- Second argument used for precision. N'abcde'); -- Third argument supplies the string. -- The message text returned is: << abc>>. GO
--示例4
RAISERROR (N'<<%7.3s>>', -- Message text. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO
--示例5
--A. 從 CATCH 塊返回錯(cuò)誤消息
以下代碼示例顯示如何在 TRY 塊中使用 RAISERROR 使執(zhí)行跳至關(guān)聯(lián)的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關(guān)調(diào)用 CATCH 塊的錯(cuò)誤的信息。
BEGIN TRY RAISERROR ('Error raised in TRY block.', -- Message text. 16, -- Severity. 1 -- State. ); END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR (@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ); END CATCH;
--示例6
--B. 在 sys.messages 中創(chuàng)建即席消息
以下示例顯示如何引發(fā) sys.messages 目錄視圖中存儲(chǔ)的消息。
該消息通過 sp_addmessage 系統(tǒng)存儲(chǔ)過程,以消息號(hào)50005添加到 sys.messages 目錄視圖中。
sp_addmessage @msgnum = 50005, @severity = 10, @msgtext = N'<<%7.3s>>'; GO RAISERROR (50005, -- Message id. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO sp_dropmessage @msgnum = 50005; GO
--示例7
--C. 使用局部變量提供消息文本
以下代碼示例顯示如何使用局部變量為 RAISERROR 語句提供消息文本。
sp_addmessage @msgnum = 50005, @severity = 10, @msgtext = N'<<%7.3s>>'; GO RAISERROR (50005, -- Message id. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO sp_dropmessage @msgnum = 50005; GO
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(3)
利用ROW_NUMBER()進(jìn)行高效率的分頁。2010-02-02sql2008 附加數(shù)據(jù)庫時(shí)出現(xiàn)錯(cuò)誤5123提示的解決方法
今天重裝了一下家里電腦的數(shù)據(jù)庫,在附加己有數(shù)據(jù)庫時(shí),出現(xiàn)5123錯(cuò)誤2011-11-11SQL2008中SQL應(yīng)用之-阻塞(Blocking)應(yīng)用分析
當(dāng)一個(gè)數(shù)據(jù)庫會(huì)話中的事務(wù)正鎖定一個(gè)或多個(gè)其他會(huì)話事務(wù)想要讀取或修改的資源時(shí),會(huì)產(chǎn)生阻塞(Blocking)。2011-06-06一步一步教你創(chuàng)建SQL 2005計(jì)劃任務(wù)應(yīng)用圖解教程
使用sql的計(jì)劃任務(wù)可以處理一些特殊環(huán)境的數(shù)據(jù),除了使用windows系統(tǒng)的計(jì)劃任務(wù)來定時(shí)處理,不過要配合程序才行,有些事情可以直接使用sql本身的計(jì)劃任務(wù),更方便,所以本文圖解一下Sql2005計(jì)劃任務(wù)的創(chuàng)建使用。2010-03-03sql server 2005數(shù)據(jù)庫備份還原圖文教程
這篇文章主要介紹了sql server 2005數(shù)據(jù)庫備份還原圖文教程,為了方便大家這里提供的是詳細(xì)的圖文步驟,需要的朋友可以參考下2014-08-08在sqlserver2005中安裝sql server 2000的示例數(shù)據(jù)庫northwind的方法
裝完sql server 2005后卻沒有找到ms的示例數(shù)據(jù)庫northwind 后來查看安裝光盤發(fā)現(xiàn)sql server 2005種只有adventurework與adventureworkDW這兩個(gè)sample database 到ms官方站找了好久 才找到sql server 2000的sample database2013-05-05sql2005 本地計(jì)算機(jī)上的SQL SERVER服務(wù)啟動(dòng)后又停止了解決方法
這篇文章主要介紹了本地計(jì)算機(jī)上的SQL SERVER服務(wù)啟動(dòng)后又停止了解決方法,需要的朋友可以參考下2015-01-01