raiserror 是由單詞 raise error 組成
raise 增加;提高;提公升
raiserror 的作用: raiserror 是用於丟擲乙個錯誤。
語法如下:
raiserror (
[ ,argument [ ,...n ] ]
)
[ with option [ ,...n ] ]
簡要說明一下:
第乙個引數:
msg_id:表示可以是乙個sys.messages表中定義的訊息代號;
使用 sp_addmessage 儲存在 sys.messages 目錄檢視中的使用者定義錯誤訊息號。
使用者定義錯誤訊息的錯誤號應當大於 50000。
msg_str:表示也可以是乙個使用者定義訊息,該錯誤訊息最長可以有 2047 個字元;
(如果是常量,請使用n'***x',因為是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>>';
goraiserror (50005, -- message id.
10, -- severity,
1, -- state,
n'abcde'); -- first argument supplies the string.
-- the message text returned is: << abc>>.
gosp_dropmessage @msgnum = 50005;
go--示例7
--c. 使用區域性變數提供訊息文字
以下**示例顯示如何使用區域性變數為 raiserror 語句提供訊息文字。
sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = n'<<%7.3s>>';
goraiserror (50005, -- message id.
10, -- severity,
1, -- state,
n'abcde'); -- first argument supplies the string.
-- the message text returned is: << abc>>.
gosp_dropmessage @msgnum = 50005;
go注意:
使用者定義錯誤訊息的錯誤號應當大於 50000。需要先 新增自定義錯誤
SQL中raiserror的使用
在學習觸發器trigger的時候碰到的 呵呵 分享一下!語法raiserror argument n with option n 語法分析 必需指定錯誤訊息id或錯誤訊息文字,severity 指定錯誤級別 使用者可以使用從 0 到 18 之間的嚴重級別 state 錯誤呼叫狀態的資訊 值預設為 1...
C 獲取資料庫中RAISERROR丟擲的錯誤並提示
在寫儲存過程時,我們常常會使用raiserror語句來丟擲乙個自定義異常。如何在.net程式中來捕捉這個異常。framework類庫為我們提供了乙個sqlexception異常型別,該型別是當 sql server 返回警告或錯誤時引發的異常。乙個儲存過程中可以有多個raiserror語句來丟擲的異...
sql中類似switch case語句的用法
sql中類似switch case語句的用法 select getdate as 日期,case month getdate when 11 then 十一 when 12 then 十二 else substring 一二三四五六七 十 month getdate 1 end 月 as 月份 在一...