日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

SQL Server 中 RAISERROR 的用法(转)

發布時間:2023/12/13 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 中 RAISERROR 的用法(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在存儲過程中進程會處理一些邏輯性的錯誤,如:將RMB轉換為USD時,沒有查詢到想要的匯率 這個時候最好在存儲過程中拋個異常,方便自己查找錯誤信息。。。

其語法如下:

RAISERROR({msg_id|msg_str|@local_variable}
{,severity,state}
[,argument[,...n]]
)
[WITHoption[,...n]]

簡要說明一下:

第一個參數:{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一個sys.messages表中定義的消息代號;
使用 sp_addmessage 存儲在 sys.messages 目錄視圖中的用戶定義錯誤消息號。
用戶定義錯誤消息的錯誤號應當大于 50000。

msg_str:表示也可以是一個用戶定義消息,該錯誤消息最長可以有 2047 個字符;
(如果是常量,請使用N'xxxx',因為是nvarchar的)
當指定 msg_str 時,RAISERROR 將引發一個錯誤號為 5000 的錯誤消息。

@local_variable:表示也可以是按照 msg_str 方式的格式化字符串變量。

第二個參數:severity
用戶定義的與該消息關聯的嚴重級別。(這個很重要)
任何用戶都可以指定 0 到 18 之間的嚴重級別。
[0,10]的閉區間內,不會跳到catch;
如果是[11,19],則跳到catch;
如果[20,無窮),則直接終止數據庫連接;

第三個參數:state
如果在多個位置引發相同的用戶定義錯誤,
則針對每個位置使用唯一的狀態號有助于找到引發錯誤的代碼段。

介于 1 至 127 之間的任意整數。(state 默認值為1)
當state 值為 0 或大于 127 時會生成錯誤!

第四個參數:argument
用于代替 msg_str 或對應于 msg_id 的消息中的定義的變量的參數。

第五個參數:option
錯誤的自定義選項,可以是下表中的任一值:
LOG :在錯誤日志和應用程序日志中記錄錯誤;
NOWAIT:將消息立即發送給客戶端;
SETERROR:將 @@ERROR 值和 ERROR_NUMBER 值設置為 msg_id 或 50000;


[SQL]代碼示例

--示例1

DECLARE@raiseErrorCodenvarchar(50)
SET@raiseErrorCode=CONVERT(nvarchar(50),YOURUNIQUEIDENTIFIERKEY)
RAISERROR('%sINVALIDID.Thereisnorecordintable',16,1,@raiseErrorCode)

--示例2


RAISERROR(
N'Thisismessage%s%d.',--Messagetext,
10,--Severity,
1,--State,
N'number',--Firstargument.
5--Secondargument.
);
--Themessagetextreturnedis:Thisismessagenumber5.
GO

--示例3


RAISERROR(N'<<%*.*s>>',--Messagetext.
10,--Severity,
1,--State,
7,--Firstargumentusedforwidth.
3,--Secondargumentusedforprecision.
N'abcde');--Thirdargumentsuppliesthestring.
--Themessagetextreturnedis:<<abc>>.
GO

--示例4

RAISERROR(N'<<%7.3s>>',--Messagetext.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<<abc>>.
GO

--示例5

--A. 從 CATCH 塊返回錯誤消息
以下代碼示例顯示如何在 TRY 塊中使用 RAISERROR 使執行跳至關聯的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關調用 CATCH 塊的錯誤的信息。


BEGINTRY
RAISERROR('ErrorraisedinTRYblock.',--Messagetext.
16,--Severity.
1--State.
);
ENDTRY
BEGINCATCH
DECLARE@ErrorMessageNVARCHAR(4000);
DECLARE@ErrorSeverityINT;
DECLARE@ErrorStateINT;

SELECT
@ErrorMessage=ERROR_MESSAGE(),
@ErrorSeverity=ERROR_SEVERITY(),
@ErrorState=ERROR_STATE();

RAISERROR(@ErrorMessage,--Messagetext.
@ErrorSeverity,--Severity.
@ErrorState--State.
);
ENDCATCH;

--示例6

--B. 在 sys.messages 中創建即席消息
以下示例顯示如何引發 sys.messages 目錄視圖中存儲的消息。
該消息通過 sp_addmessage 系統存儲過程,以消息號50005添加到 sys.messages 目錄視圖中。


sp_addmessage@msgnum=50005,
@severity=10,
@msgtext=N'<<%7.3s>>';
GO

RAISERROR(50005,--Messageid.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<<abc>>.
GO

sp_dropmessage@msgnum=50005;
GO

--示例7
--C. 使用局部變量提供消息文本
以下代碼示例顯示如何使用局部變量為 RAISERROR 語句提供消息文本。


sp_addmessage@msgnum=50005,
@severity=10,
@msgtext=N'<<%7.3s>>';
GO

RAISERROR(50005,--Messageid.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<<abc>>.
GO

sp_dropmessage@msgnum=50005;
GO

總結

以上是生活随笔為你收集整理的SQL Server 中 RAISERROR 的用法(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。