SQL Server儲存過程中raiserror的使用
一 系統預定義錯誤程式碼
SQL Server 有3831個預定義錯誤程式碼,由master.dbo.sysmessages表維護。每一個錯誤程式碼都有相應的級別和描述。
錯誤定義的級別從0到25。20以上的錯誤代表重大錯誤,通常意味著該錯誤會導致儲存程式立刻終止,並且所有的客戶連線都要重新初始化。
非關鍵性錯誤只是禁止掉當前執行的程式行,並繼續執行。
判斷錯誤是否發生和得到錯誤描述資訊的方法:
IF @@ERROR = 0
begin
SELECT @ERRORMESSAGETXT = description FROM master.dbo.sysmessages WHERE error = @@ERROR
end
二 raiserror語法
msg_id | 定製訊息的錯誤程式碼。. RAISERROR 接受任何大於13000的數字, 但是定製資訊msg_id要大於等於50000。 |
msg_str | 定製資訊的文字。 |
severity | 定製資訊的級別。從 0 to 25, 19-25 是重大錯誤程式碼。 |
state | 呈現導致錯誤的狀態,不在SQL內部使用。 |
argument | 定義在錯誤資訊中的可以替換的值。 |
WITH… | 有三個選項: |
語法
RAISERROR ( { msg_id ¦ msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
引數
msg_id
儲存於 sysmessages 表中的使用者定義的錯誤資訊。使用者定義錯誤資訊的錯誤號應大於 50,000。由特殊訊息產生的錯誤是第 50,000 號。
msg_str
是一條特殊訊息,其格式與 C 語言中使用的 PRINTF 格式樣式相似。此錯誤資訊最多可包含 400 個字元。如果該資訊包含的字元超過 400 個,
則只能顯示前 397 個並將新增一個省略號以表示該資訊已被截斷。所有特定訊息的標準訊息 ID 是 14,000。
msg_str 支援下面的格式:
% [[flag] [width] [precision] [{h ¦ l}]] type
可在 msg_str 中使用的引數包括:
flag
用於確定使用者定義的錯誤資訊的間距和對齊的程式碼。
{h | l} type
與字元型別 d、i、o、x、X 或 u 一起使用,用於建立 short int (h) 或 long int (l) 型別的值。
字元型別 | 表示 |
---|---|
d 或 I | 帶符號的整數 |
o | 不帶符號的八進位制數 |
p | 指標型 |
s | String |
u | 不帶符號的整數 |
x 或 X | 不帶符號的十六進位制數 |
說明 不支援 float、雙精度和單精度字元型別。
severity
使用者定義的與訊息關聯的嚴重級別。使用者可以使用從 0 到 18 之間的嚴重級別。19 到 25 之間的嚴重級別只能由 sysadmin 固定伺服器角色成員使用。
若要使用 19 到 25 之間的嚴重級別,必須選擇 WITH LOG 選項。
注意 20 到 25 之間的嚴重級別被認為是致命的。如果遇到致命的嚴重級別,客戶端連線將在收到訊息後終止,並將錯誤記入錯誤日誌和應用程式日誌。
state
從 1 到 127 的任意整數,表示有關錯誤呼叫狀態的資訊。state 的負值預設為 1。
argument
是用於取代在 msg_str 中定義的變數或取代對應於 msg_id 的訊息的引數。可以有 0 或更多的替代引數;然而,替代引數的總數不能超過 20 個。
每個替代引數可以是區域性變數或這些任意資料型別:int1、int2、int4、char、varchar、binary 或 varbinary。不支援其它資料型別。
option
錯誤的自定義選項。option 可以是以下值之一:
值 描述
LOG 將錯誤記入伺服器錯誤日誌和應用程式日誌。記入伺服器錯誤日誌的錯誤目前被限定為最多 440 位元組。
NOWAIT 將訊息立即傳送給客戶端。
SETERROR 將 @@ERROR 的值設定為 msg_id 或 50000,與嚴重級別無關。
三 使用者自定義錯誤處理
IF (@role_type_id IS NULL)
BEGIN
RAISERROR ('Parameter ''role_type_id'' can not be null.' , 16, 1) WITH NOWAIT
RETURN 1
END
四 定製錯誤資訊
當然,大多數情況下,錯誤資訊會使用多次,一遍一遍的輸入相同的資訊顯然不理智。
使用 儲存過程將定製錯誤資訊新增到sysmessages 表裡。以後,在使用RAISERROR 時候就可以引用新的資訊ID號。
定製錯誤資訊的標識號必須大於等於50000,資訊本身的長度不能超過255個字元。
下面是例子,建立新的資訊,賦予識別號55555,級別為10,呼叫方式如下:sp_addmessage 55555, 10, 'New error message.'
你可以在儲存程式中增加提交新的錯誤:RAISERROR 55555, 10
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-786087/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 儲存過程SQLServer儲存過程
- 【SQL Server】--儲存過程SQLServer儲存過程
- MS SQL Server儲存過程SQLServer儲存過程
- Sql Server系列:儲存過程SQLServer儲存過程
- 解密SQL SERVER儲存過程解密SQLServer儲存過程
- ms sql server儲存過程目前使用模板SQLServer儲存過程
- SQL Server 儲存過程的運用SQLServer儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- SQL Server基礎:儲存過程SQLServer儲存過程
- sql server儲存過程語法SQLServer儲存過程
- SQL server儲存過程函式SQLServer儲存過程函式
- SQL Server中建立儲存過程時,with recompoile的作用SQLServer儲存過程
- 在 SQL Server 的儲存過程中呼叫 Com 元件 (轉)SQLServer儲存過程元件
- Ms Sql Server查詢儲存過程中的內容SQLServer儲存過程
- SQL Server raiserrorSQLServerAIError
- SQL Server儲存過程的優缺點SQLServer儲存過程
- SQL Server基礎之儲存過程SQLServer儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- Java呼叫SQL Server的儲存過程詳解JavaSQLServer儲存過程
- SQL Server 禁用擴充套件儲存過程SQLServer套件儲存過程
- SQL Server 資料備份儲存過程SQLServer儲存過程
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- 編寫和優化SQL Server的儲存過程優化SQLServer儲存過程
- SQL Server 儲存過程的經典分頁(轉)SQLServer儲存過程
- SER SERVER儲存過程Server儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 【fosoyo】SQL Server儲存過程/函式加/解密SQLServer儲存過程函式解密
- 幾個實用SQL Server取儲存過程SQLServer儲存過程
- SQL SERVER 2005分頁儲存過程SQLServer儲存過程
- SQL SERVER 儲存過程 獲取三個數中的最大值SQLServer儲存過程
- 一個SQL Server Sa密碼破解的儲存過程SQLServer密碼儲存過程
- 關於SQL Server中儲存過程在C#中呼叫的簡單示例SQLServer儲存過程C#
- 使用SQL SERVER儲存過程實現歷史資料遷移SQLServer儲存過程
- 在SQL Server中使用儲存過程傳送電子郵件SQLServer儲存過程
- SQL儲存過程示例SQL儲存過程
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- 儲存過程 與 SQL Server語句大比拼儲存過程SQLServer
- SQL Server系統儲存過程和引數示例SQLServer儲存過程