目錄
二、用try...catch發現錯誤
三、捕獲錯誤的系統函式
四、用@@error捕獲上一條語句的錯誤
五、用raiserror反饋錯誤
回到頂部
sqlserver在每個資料庫的系統檢視sys.messages中儲存系統自定義(message_id <= 50000)和使用者自定義(message_id>50000)錯誤訊息。
得到的系統錯誤訊息分為不同程度的嚴重性級別。嚴重性級別是通過數字來表示的,數字越小表示嚴重級別越低。反之則嚴重性越高。嚴重性較高的錯誤指示需要盡快解決問題。
回到頂部
try...catch結構
begin try回到頂部要執行的t-sql**,一旦錯誤將傳遞給catch塊進行處理
end try
begin catch
檢索和處理錯誤資訊的**
end catch
正常執行的t-sql語句
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
回到頂部
t-sql還提供了乙個簡單的系統函式@@error來捕獲上一條語句的錯誤。如果上一條語句執行成功。@@error系統函式將返回0;如果上一條語句生成錯誤, @@error將返回錯誤號。
每條語句完成時@@error都會更改。
例如:
select 1/0結果如圖:select * from sys.messages where message_id = @@error and language_id = 2052
回到頂部
將生成的sqlserver引擎錯誤或警告資訊(從sys.messages系統檢視獲得)反饋到應用程式中。sys.messages系統檢視中由sqlserver自身定義的資訊,其 message_id列的值小於等於5000。
返回使用者使用儲存過程sp_addmessage建立的自定義訊息(儲存在系統檢視sys.messages中,其message_id大於50000)。
print語句是t-sql提供的用於反饋資訊的語句,print語句只能反饋字串或字串表示式的值。
raiserror語句除了print語句的功能外,還支援類似c語言仲printf函式的字串替換功能。這樣可以先在字串中定義要替換的資料的型別和位置,在輸出時自動 將字串內容進行替換。
語法:
raiserror()[ ,argument [ ,...n ] ] )
[ with option [,...n] ]
SQL Server複製中錯誤處理
在sql server的複製中出現在錯誤 應用複製的命令時在訂閱伺服器上找不到該行 換上以前的做法就是刪除掉這個複製,然後再新建乙個複製,但是這次,我突然想baidu一下,看看別人是怎麼處理這個問題的,然後發現找到的文章都是從msdn上抄下來的,因此我決定把我的做法寫下來。首先查msdn,確定這個錯...
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...
sql server 2000掛起錯誤處理整理
新裝或者以前裝過sql server,後來刪掉。現在重灌,會出現 以前的某個程式安裝已在安裝計算機上建立掛起的檔案操作,執行安裝程式之前必須重新啟動計算機 錯誤。無法進行下去。以下為解決步驟 1 新增 刪除程式中徹底刪除sql server。2 將沒有刪除的sql server目錄也刪除掉。3 開啟...