中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL?Server中如何實現錯誤處理

發布時間:2022-05-21 14:54:02 來源:億速云 閱讀:302 作者:iii 欄目:開發技術

今天小編給大家分享一下SQL Server中如何實現錯誤處理的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、SQLServer數據庫引擎錯誤

1、查詢系統錯誤信息

SQLServer在每個數據庫的系統視圖sys.messages中存儲系統自定義(Message_id <= 50000)和用戶自定義(Message_id>50000)錯誤消息。

2、系統錯誤信息的嚴重性級別

得到的系統錯誤消息分為不同程度的嚴重性級別。嚴重性級別是通過數字來表示的,數字越小表示嚴重級別越低。反之則嚴重性越高。嚴重性較高的錯誤指示需要盡快解決問題。

二、用try...catch發現錯誤

try...catch結構       

begin try
        要執行的T-SQL代碼,一旦錯誤將傳遞給catch塊進行處理
      end try
      begin catch
        檢索和處理錯誤信息的代碼
      end catch
      正常執行的T-SQL語句
  • try:其中,try塊是包含在begin try和end try之間的T-SQL代碼段,在該代碼段中一旦發生錯誤將傳遞給catch塊,如果沒有錯誤將直接執行catch塊后面的代碼。

  • catch:catch塊是包含在begin catch和end catch之間的T-SQL代碼段,在該代碼段中檢索和處理try塊中的錯誤信息。

三、捕獲錯誤的系統函數

  • error_number()
    返回錯誤的ID號,對應sys.messages系統視圖中的message_id字段。

  • error_line()
    返回T-SQL代碼中錯誤出現的語句行數。

  • error_message()
    返回將返回給應用程序的消息文本。該文本包括為所有可替換參數提供的值,如長度、對象名或時間。對應sys.messages系統視圖中的text字段。

  • error_procedure()
    返回出現錯誤的存儲過程或觸發器名稱。如果在存儲過程或觸發器中未出現錯誤,該函數返回NULL。

  • error_severity()
    返回錯誤的嚴重性級別。對應sys.messages系統視圖中的severity字段。

  • error_state()
    返回狀態

 示例:

begin try
    select 1/0
end try
begin catch
    select 
        error_number() as 'number',
        error_line() as 'line',
        error_message() as 'message',
        error_severity() as 'severity',
        error_state()    as 'state'
end catch

輸出結果如圖所示:

SQL?Server中如何實現錯誤處理

四、用@@ERROR捕獲上一條語句的錯誤

T-SQL還提供了一個簡單的系統函數@@ERROR來捕獲上一條語句的錯誤。如果上一條語句執行成功。@@ERROR系統函數將返回0;如果上一條語句生成錯誤,@@ERROR將返回錯誤號。

每條語句完成時@@ERROR都會更改。

例如:

select 1/0
select * from sys.messages where message_id = @@error and language_id = 2052

 結果如圖:

SQL?Server中如何實現錯誤處理

五、用RAISERROR反饋錯誤

功能:

將生成的SQLServer引擎錯誤或警告信息(從sys.messages系統視圖獲得)反饋到應用程序中。sys.messages系統視圖中由SQLServer自身定義的信息,其message_id列的值小于等于5000。

返回用戶使用存儲過程sp_addmessage創建的自定義消息(存儲在系統視圖sys.messages中,其message_id大于50000)。

與print語句的區別:

print語句是T-SQL提供的用于反饋信息的語句,print語句只能反饋字符串或字符串表達式的值。

raiserror語句除了print語句的功能外,還支持類似C語言仲printf函數的字符串替換功能。這樣可以先在字符串中定義要替換的數據的類型和位置,在輸出時自動將字符串內容進行替換。

語法: 

raiserror({ msg_id | msg_str | @local_variable })
        { ,severity,state }
         [ ,argument [ ,...n ] ] )
         [ with option [,...n] ]

參數說明:

  • msg_id:存儲在sys.messages系統視圖中的錯誤消息號(message_id)。如果是用戶使用as_addmessage系統存儲過程自定義的錯誤消息,其錯誤號應當大于50000.如果未指定msg_id,則返回一個錯誤號為50000的錯誤消息。

  • msg_str:用戶自定義消息,msg_str是一個字符串,具有可選的嵌入轉換規格。每個轉換規格都會定義參數列表中的值。如何格式化并將其置于msg_str中轉換規格位置上的字段中,轉換規格的格式如下:%[[flag][width][.precision][{h|1}]]type。

  • @local_variable:包含按照msg_str的方式格式化的字符串的任何有效字符串數據類型的變量。@local_variable的數據類型必須為char或varchar,或者必須能夠隱式轉換為這些數據類型。

  • severity:用戶定義的與該消息關聯的嚴重級別。當使用msg_id引發使用sp_addmessage創建的用戶定義消息時,paiserror上指定的嚴重性將覆蓋sp_addmessage中指定的嚴重性。

  • state:狀態號,1至少127之間的任意整數。如果在多個位置引發相同的用戶自定義錯誤,則針對每個位置使用唯一的狀態好有助于找到引發錯誤的代碼段。

  • argument:用于代替msg_str或對應于msg_id的消息中的定義的變量的參數。可以有0個或多個替代參數,但是替代參數的總數不能超過20個。

  • option:錯誤的自定義選項。LOG:在SQLServer數據庫引擎實例的錯誤日志和應用程序日志中記錄錯誤;NOWAIT:將消息立即發送給客戶端;SETERROR:將@@ERROR值和ERROR_NUMBER值設置為msg_id或50000,不用考慮嚴重級別。

以上就是“SQL Server中如何實現錯誤處理”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海阳市| 贵德县| 潢川县| 印江| 化德县| 临沭县| 文水县| 平顺县| 汪清县| 阳原县| 阳朔县| 临汾市| 邵阳县| 克拉玛依市| 迁西县| 抚州市| 桂平市| 阜康市| 北宁市| 宁都县| 武宣县| 丹巴县| 通州区| 固阳县| 祁门县| 洪泽县| 长宁县| 新巴尔虎左旗| 博白县| 饶平县| 婺源县| 五华县| 九江市| 郯城县| 庆元县| 南昌县| 海兴县| 色达县| 那坡县| 凤城市| 宜都市|