SQL Server 中 RAISERROR 的用法詳細(xì)介紹
SQL Server 中 RAISERROR 的用法
raiserror 的作用: raiserror 是用于拋出一個錯誤。[ 以下資料來源于sql server 2005的幫助 ]
其語法如下:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]
簡要說明一下:
第一個參數(shù):{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一個sys.messages表中定義的消息代號;
使用 sp_addmessage 存儲在 sys.messages 目錄視圖中的用戶定義錯誤消息號。
用戶定義錯誤消息的錯誤號應(yīng)當(dāng)大于 50000。
msg_str:表示也可以是一個用戶定義消息,該錯誤消息最長可以有 2047 個字符;
(如果是常量,請使用N'xxxx',因?yàn)槭莕varchar的)
當(dāng)指定 msg_str 時(shí),RAISERROR 將引發(fā)一個錯誤號為 5000 的錯誤消息。
@local_variable:表示也可以是按照 msg_str 方式的格式化字符串變量。
第二個參數(shù):severity
用戶定義的與該消息關(guān)聯(lián)的嚴(yán)重級別。(這個很重要)
任何用戶都可以指定 0 到 18 之間的嚴(yán)重級別。
[0,10]的閉區(qū)間內(nèi),不會跳到catch;
如果是[11,19],則跳到catch;
如果[20,無窮),則直接終止數(shù)據(jù)庫連接;
第三個參數(shù):state
如果在多個位置引發(fā)相同的用戶定義錯誤,
則針對每個位置使用唯一的狀態(tài)號有助于找到引發(fā)錯誤的代碼段。
介于 1 至 127 之間的任意整數(shù)。(state 默認(rèn)值為1)
當(dāng)state 值為 0 或大于 127 時(shí)會生成錯誤!
第四個參數(shù):argument
用于代替 msg_str 或?qū)?yīng)于 msg_id 的消息中的定義的變量的參數(shù)。
第五個參數(shù):option
錯誤的自定義選項(xiàng),可以是下表中的任一值:
LOG :在錯誤日志和應(yīng)用程序日志中記錄錯誤;
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 塊返回錯誤消息
以下代碼示例顯示如何在 TRY 塊中使用 RAISERROR 使執(zhí)行跳至關(guān)聯(lián)的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關(guān)調(diào)用 CATCH 塊的錯誤的信息。
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 目錄視圖中存儲的消息。
該消息通過 sp_addmessage 系統(tǒng)存儲過程,以消息號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
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
SQL Server 2005/2008 導(dǎo)入導(dǎo)出數(shù)據(jù)常見報(bào)錯解決方法
導(dǎo)入導(dǎo)出向?qū)?在“選擇源表和源視圖” 頁,在導(dǎo)入導(dǎo)出的表打勾之后點(diǎn)擊編輯映像,選擇“啟用標(biāo)識列入”即可2013-11-11
sqlserver巧用row_number和partition by分組取top數(shù)據(jù)
SQL Server 2005后之后,引入了row_number()函數(shù),row_number()函數(shù)的分組排序功能使這種操作變得非常簡單2011-12-12
關(guān)于SQLServer2005的學(xué)習(xí)筆記 XML的處理
在 SQLServer2005 中對 XML 的處理功能顯然增強(qiáng)了很多,提供了 query(),value(),exist(),modify(),nodes() 等函數(shù)。2010-04-04
sql server 2005因架構(gòu)無法刪除用戶錯誤15138的解決方法
這篇文章主要介紹了Microsoft SQL Server錯誤: 15138刪除對于用戶失敗,數(shù)據(jù)庫主體在該數(shù)據(jù)庫中擁有架構(gòu),無法刪除問題的解決方法 ,需要的朋友可以參考下2014-07-07
詳解刪除SQL Server 2005 Compact Edition數(shù)據(jù)庫
這篇文章主要介紹了詳解刪除SQL Server 2005 Compact Edition數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2017-06-06
SQLServer 2005數(shù)據(jù)庫連接字符串 連接sql2005必備資料
現(xiàn)在好多朋友開始用sqlserver 2005了,因?yàn)楦鷖ql2000有區(qū)別,所以這里整理了下,需要的朋友可以參考下。2010-04-04
Win2008中SqlServer2008 無法打開錯誤日志文件導(dǎo)致無法啟動的解決方法
今天早上一個客戶的SqlServer 2008的服務(wù)器應(yīng)為重新修改配置導(dǎo)致網(wǎng)站打不開,提示initerrlog: 無法打開錯誤日志文件2011-12-12
SQL2005學(xué)習(xí)筆記 APPLY 運(yùn)算符
APPLY 運(yùn)算符簡介: APPLY 運(yùn)算符是Sql Server2005新增加的運(yùn)算符。2009-07-07

