SQL中RAISERROR的用法

2021-06-25 13:37:24 字數 4009 閱讀 7534

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 月份 在一...