[MSSQL] 例外處理(error handling)

Hits: 280

筆記一下自己摸索出來的,如何使用例外處理(try...catch)、迴圈while、錯誤訊息(@@ERROR)的筆記

目標

使用除數不能為0的規則,來傳回迴圈中的錯誤代碼,迴圈從1開始,每次遞減1,直到-1為止。

程式碼


declare @i int = 1

while @i >= (-1)
begin
  print ('@i = ' + convert(varchar, @i))
  begin try
    print ('1/@i = ' + convert(varchar, 1 / @i))
    print ('@@ERROR = ' + convert(varchar, @@ERROR))
    print ('--------------------')
    set @i = @i - 1
  end try
  begin catch
    print ('1/0 is wrong, @@ERROR = ' + convert(varchar, @@ERROR) + ', 錯誤訊息: ' +  ERROR_MESSAGE())
    print ('--------------------')
    set @i = @i - 1
    continue
  end catch
end

==========RESULTS=========
@i = 1
1/@i = 1
@@ERROR = 0
--------------------
@i = 0
1/0 is wrong, @@ERROR = 8134, 錯誤訊息: 發現除以零的錯誤。
--------------------
@i = -1
1/@i = -1
@@ERROR = 0
--------------------
==========RESULTS=========
說明
1. while之後,要接begin..{sql statement block}..end,中間的sql statement block就填入要執行的查詢
2. 用begin try...end try來執行要被例外處理偵測的查詢,當try裡面的查詢出錯時,會自動跳到begin catch...end catch裡面的第一行,開始執行出錯時的指令
3. 當出錯時,要先印出 @@ERROR 的錯誤代碼,不然執行下一段指令後,@@ERROR會因執行成功而變成0
4. ERROR_MESSAGE()是在catch函數內特有的用法,可以不受@@ERROR一定要在第一行執行的限制,可以在catch區塊內任一位置執行,都可回傳錯誤訊息,其他的還有ERROR_NUMBER, ERROR_LINE(), ERROR_STATE...等等可以使用

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You may also like these