淺談在SQL Server2005中進行錯誤捕捉(2)_Mssql數據庫教程
推薦:解析SQL Server 2000 SP4與數據鏈接池問題今天遠程連接一臺xp sp2上的SQL,報錯信息如下: 以下為引用的內容: Timeout expired. The timeout period elapsed prior to obtaining
在SQL Server中,不僅可以捕捉系統提供的錯誤,還可以自定義錯誤。有兩種方法可以定義錯誤信息。
1、使用sp_addmessage系統存儲過程添加錯誤信息,然后使用RAISERROR拋出錯誤。
sp_addmessage將錯誤號,錯誤級別、錯誤描述等信息添加到系統表中,然后使用RAISERROR根據相應的錯誤號拋出錯誤信息。用戶自定義的信息應該從50001開始。
| 以下為引用的內容:
exec sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = ’sql encounter an error(%s).’, @lang = ’us_english’ exec sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = ’sql遇到了一個錯誤(%1!).’ |
如果使用的SQL Server版本是非英語版本,在添加本地錯誤信息時必須首先添加英文的錯誤信息。錯誤描述可以象c語言中的printf的格式字符串一樣使用參數,如%s、%d。但要注意的是在英文版的錯誤信息中要使用%s、%d等形式,而在本地化的錯誤信息中要使用%1!、%2!等形式,在每個%?(1 <= ? <= n)后需要加一個!,而且%?的數目必須和英文版的錯誤信息的參數一致。
在未插入本地化錯誤信息時,RAISERROR將使用英文版的錯誤信息。當插入本地化錯誤信息時,RAISERROR使用本地化的錯誤信息。
RAISERROR(50001, 16, 1, ’測試’)
輸出的結果:
服務器: 消息 50001,級別 16,狀態 1,行 1
sql遇到了一個錯誤(測試).
其中’測試’字符串通過%1傳入本地化的錯誤描述字符串中。
2、直接使用RAISERROR將錯誤拋出。
使用第一種方法雖然使Transact-SQL語句看上去更整潔(這種方法類似于在編程語言中使用常量定義錯誤信息,然后在不同的地方通過錯誤編號引用這些錯誤信息。),但是這樣做卻使錯誤信息和數據庫的耦合度增加,因為如果將這些帶有RAISERROR的Transact-SQL放到別的SQL Server數據庫上執行,由于在其它的數據庫中還未添加錯誤信息,因此會產生RAISERROR調用錯誤,除非使用sp_addmessage將所需的錯誤信息再加入到其它的數據庫中。
分享:解析SQL Server 2008對T-SQL語言的增強Microsoft SQL Server 2008 對 T-SQL 語言進行了進一步增強。為了讓開發人員盡快了解這些變化,我們針對 2007 年 6 月 CTP 版本的 SQL Server 2008 中的 T-SQL 語言的新增功能進行
- sql 語句練習與答案
- 深入C++ string.find()函數的用法總結
- SQL Server中刪除重復數據的幾個方法
- sql刪除重復數據的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數據庫,提示 無法為該請求檢索數據 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數的用法實例詳解
- 相關鏈接:
- 教程說明:
Mssql數據庫教程-淺談在SQL Server2005中進行錯誤捕捉(2)
。