亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server 中 RAISERROR 的用法

系統 2032 0
原文: SQL Server 中 RAISERROR 的用法


raiserror? 是由單詞 raise error 組成
?? ? raise? 增加; 提高; 提升


raiserror 的作用 : raiserror 是用于拋出一個錯誤。 [ 以下資料來源于sql server 2005的幫助 ]

?

其語法如下:

RAISERROR ?(?{?msg_id? | ?msg_str? | ? @local_variable ?}????????
????????????{?,severity?,state?}????????
????????????
[ ?,argument?[?,...n? ] ?]?
??????????)???????
???
[ ?WITH?option?[?,...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 ? @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 使執行跳至關聯的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關調用 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 中創建即席消息
以下示例顯示如何引發 sys.messages 目錄視圖中存儲的消息。
該消息通過 sp_addmessage 系統存儲過程,以消息號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



參考來源:

http://msdn.microsoft.com/zh-cn/library/ms178592.aspx

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/483588bd-021b-4eae-b4ee-216268003e79.htm ?


SQL Server 中 RAISERROR 的用法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美成人交tv免费观看 | 欧美综合色| 中国特级黄一级真人毛片 | 亚洲精品久久久久综合中文字幕 | 久久亚洲精品专区蓝色区 | 草免费视频 | 99在线观看 | 狠狠躁天天躁 | 国产精品你懂的 | 亚洲日本欧美在线 | 久久精品国产精品亚洲精品 | 国内精品免费一区二区三区 | 一级毛片免费 | 久久久99精品免费观看精品 | 久热免费在线观看 | 久久99国产精品二区不卡 | 亚洲欧美日韩在线一区 | 天天操天天舔天天干 | 日韩中文字幕视频 | 亚洲免费视 | 国产激情一区二区三区成人91 | 欧美操人视频 | 久久久精品2018免费观看 | 久久91综合国产91久久精品 | 久热国产视频 | 日韩欧美亚洲国产 | 欧美在线视频免费看 | 欧美成人久久 | 无毒不卡在线观看 | 欧美vs日韩vs国产在线观看 | 老司机午夜性大片 | 天堂精品视频 | 97影院理论片 | 青青在线成人免费视频 | 欧美精品日韩一区二区三区 | 日本一级在线观看 | 日本日日黄 | 欧美成人精品高清在线播放 | 久久爱992xxoo| 五月婷综合 | 邵氏经典三级50部 |