sql server資料庫中raiserror函數的用法

來源:互聯網
上載者:User

標籤:for   tab   title   ever   where   十六進位   log   固定   預存程序   

server資料庫中raiserror的作用就和asp.NET中的throw new Exception一樣,用於拋出一個異常或錯誤。這個錯誤可以被程式捕捉到。

raiserror的常用格式如下:
raiserror(‘錯誤的描述‘,錯誤的嚴重層級代碼,錯誤的標識,錯誤的描述中的參數的值(這個可以是多個),一些其它參數),在官方上的格式描述如下:

  1. RAISERROR ( { msg_id | msg_str | @local_variable }  
  2.     { ,severity ,state }  
  3.     [ ,argument [ ,...n ] ] )  
  4.     [ WITH option [ ,...n ] ]  

其中,[ ,argument [ ,...n ] ]與 [ WITH option [ ,...n ] 兩項是可以不寫的。

分別解釋一下各參數的用法:
一、{ msg_id | msg_str | @local_variable }
從這個參數中可以看出,這一項可能為三個值,
1,sys.messages中的自訂錯誤資訊的錯誤資訊號,自訂錯誤資訊可以使用sp_addmessage預存程序添加到sys.messages中,注意, 使用者定義錯誤訊息的錯誤號碼應當大於 50000。
樣本:raiserror(50001,16,1)
2,一條直接的錯誤描述,樣本:raiserror(‘這裡是錯誤描述的樣本‘,16,1)
3,一個包含錯誤描述變數,樣本:

  1. declare @error_mes varchar(1000)  
  2. set @error_mes=‘這裡是錯誤描述的樣本‘  
  3. raiserror(@error_mes,16,1)  

二、severity
這個參數為使用者定義的該錯誤資訊的層級,我們可以指定 0 到 18 之間的嚴重層級。只有 sysadmin 固定伺服器角色成員或具有 ALTER TRACE 許可權的使用者才能指定 19 到 25 之間的嚴重層級。若要使用 19 到 25 之間的嚴重層級,必須選擇 WITH LOG 選項。

注意,如果錯誤層級在20~25之間,那麼資料庫會認為這個錯誤是致命,那麼資料庫會將該錯誤記錄到錯誤記錄檔和應用程式記錄檔後終止資料庫的串連。任何小於 0 的嚴重層級被認為等於0。大於 25 的嚴重層級被認為等於25。

三、state
這個參數是可以是1~127之間任意整數,可以用來標識錯誤的發生位置,如果一段代碼的多個位置都會發生同樣的錯誤,那麼就可以將這個參數設定為不同的值,用來標識是那個位
 置發生錯誤了。

四、[ ,argument [ ,...n ] ]
如果參數{ msg_id | msg_str | @local_variable }中包含了一些代替符,那麼這個參數就是代替符的具體的值,這個和asp.Net中的string.Format用法是一樣的。樣本如下:

  1. declare @error_mes varchar(1000)  
  2. set @error_mes=‘這裡是使用者%s引發的錯誤描述‘  
  3. raiserror(@error_mes,16,1,‘張三‘)  

也可以是這樣,可能適用性更廣些。

  1. declare @error_mes varchar(1000)  
  2. declare @error_obj varchar(1000)  
  3. select @error_obj=name from table_users where……  
  4. set @error_mes=‘這裡是使用者%s引發的錯誤描述‘  
  5. raiserror(@error_mes,16,1,@error_obj)  

上面代碼中的%s,代表它要替代是一個字串,如果我們把樣本寫成下面這樣就會報錯了:

 
  1. declare @error_mes varchar(1000)  
  2. set @error_mes=‘這裡是使用者%s引發的錯誤描述‘  
  3. raiserror(@error_mes,16,1,1)  

因為1不是一個字串,如果要替代是一個整數,就需要使用%i或者%d了。所有的對應關係如下:
1,%d或%i代表有符號整數 
2,%u代表不帶正負號的整數 
3,%o代表無符號八位元 
4,%s代表字串 
5,%x或%X代表 無符號十六進位數

五、[ WITH option [ ,...n ] ]
該參數為錯誤的自訂選項,可以是下面三個值中的一個:
1,LOG--在 Microsoft SQL Server 資料庫引擎 執行個體的錯誤記錄檔和應用程式記錄檔中記錄錯誤。記錄到錯誤記錄檔的錯誤目前被限定為最多 440 位元組。只有 sysadmin 固定伺服器角色
 成員或具有 ALTER TRACE 許可權的使用者才能指定 WITH LOG。 
2,NOWAIT--將訊息立即發送給用戶端。 
3,SETERROR--將 @@ERROR 值和 ERROR_NUMBER 值設定為 msg_id 或 50000,不用考慮嚴重層級。

我們還可以在Begin catch中使用raiserror。樣本如下: 

  1. begin try  
  2.  raiserror(‘這是一個錯誤‘,16,1) //注意,只有severity層級在11~19之間,控制才會跳轉到catch塊中。  
  3. end try  
  4. begin catch  
  5.  declare @error_message varchar(1000)    
  6.  set @error_message=error_message()    
  7.  raiserror(@error_message,16,1)    
  8.  return    
  9. end catch  

http://blog.csdn.net/qq_25627143/article/details/50814637

 

sql server資料庫中raiserror函數的用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.