国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在SQLServer的存儲過程中處理錯誤

2024-07-21 02:12:02
字體:
來源:轉載
供稿:網友
 sql server 存儲進程中的“錯誤處理”只是向客戶端返回錯誤,通常訪問提供者可以自
己做。但是至少你可以知道在執行t-sql的時候何止發生了何種錯誤。本文中,我會介紹在
   你錯了
   sql server 有接近3800個預定義錯誤代碼,由主目錄的sysmessages表維護。每一個錯
誤代碼都有相應的精確的級別,該級別大致描述了錯誤。錯誤定義的級別從0到25。20以上的
錯誤代表重大錯誤,通常意味著該錯誤會導致存儲進程立刻終止,并且所有的客戶連接都要重
新初始化。非關鍵性錯誤只是禁止掉當前運行的程序行,并繼續執行。所有的錯誤代碼都有預
   那么在得到這些信息后要做什么呢?在訪問存儲進程的時候發生錯誤,可以通過@@error
系統函數返回錯誤代碼。通過查閱sysmessages 可以得到真實的錯誤信息和級別。
   錯誤處理基礎
   假設有一個表叫做nonullsallowed,有兩個字段field1 和 field2。都不能為空。下面的
   create procedure illegalinsert as
   insert nonullsallowed values (null, null)
   print 'error occurred'
   print @@error
   假設還有下面的進程:
   create procedure sampleprocedure
   as
   exec illegalinsert
   print @@error
   當通過query analyzer調用sampleprocedure的時候,錯誤就會發生。
   server: msg 515, level 16, state 2, procedure illegalinsert, line 2
   cannot insert the value null into column 'field2', table
   'tempdb.dbo.nonullsallowed'; column does not allow s. insert fails.
   the statement has been terminated.
   error occurred
   0
   0
   這個小試驗可以告訴你一些事情
   @@error函數僅僅返回錯誤代碼
   如果@@error返回0,則沒有錯誤。
   導致非重大錯誤的語句會被跳過,進程會繼續執行下一個語句。
   基本策略
   由這三點,可以設計策略。現實中,實際的情況是幾乎不可能制定策略,但是從某個角度
   檢查存儲進程中的每一行有些不切實際,所以應該檢查那些關鍵的地方,比如關鍵性語句
   如過后繼語句依賴前面的語句,檢測到錯誤后需要手動的終止進程。
   依賴訪問提供者通知客戶錯誤。
   產生錯誤
   raiseerror可以產生定制的錯誤信息或者編號返回給客戶端。下面是rasieerror的語法,
表a是各個參數的解釋。

  raiserror ({msg_id|msg_str}{, severity, state}

  [argument [,…n]])
   [with option [, …n]]
   首先可以利用的raiseerror產生預定義錯誤代碼。raiseerror接收13000以上的錯誤代碼
   實際上,raiserror更多的用來發送定制錯誤信息。如同圖a所示,msg_str標識符可以包
任意的錯誤信息,也就是說raiserror可以將特定的錯誤信息返回給客戶。
   定制錯誤信息
   當然,大多數情況下,錯誤信息會使用多次,一遍一遍的輸入相同的信息顯然部理智。使
用sp_addmessage 存儲過程將定制錯誤信息添加到sysmessages 表里。以后,在使用
   定制錯誤信息的標識號必須大于等于50000,信息本身的長度不能超過255個字符。下面
是例子,創建新的信息,賦予識別號55555,級別為10,sp_addmessage
   存儲進程需要這樣調用。
   sp_addmessage 55555, 10, 'new error message.'
   你可以在存儲進程中增加提交新的錯誤:
   raiserror 55555, 10
   不難,只是不同
   創建帶有錯誤檢測的存儲進程并不難,僅僅是和大多數可能會用到的不同而已。只需要一
個好的計劃和相關的知識,可以可以很容易的使用他。

 國內最大的酷站演示中心!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上杭县| 仲巴县| 大英县| 石景山区| 威信县| 通州市| 柳林县| 金平| 繁峙县| 蒙自县| 井陉县| 孝义市| 元阳县| 工布江达县| 亚东县| 武隆县| 轮台县| 临武县| 平度市| 崇州市| 南木林县| 五常市| 黄石市| 革吉县| 报价| 灵宝市| 喀喇| 扎鲁特旗| 芦山县| 东源县| 东莞市| 长泰县| 瑞昌市| 苏尼特左旗| 平顺县| 阜康市| 侯马市| 土默特左旗| 华宁县| 临城县| 呼伦贝尔市|