2025年6月15日 星期日

TSQL 例外錯誤捕捉注意事項

最近在玩 TSQL,其中需要設計防呆機制,故用上了 begin try、begin catch 機制搭配完成需求,

但測試過程中,發生不在預期內的錯誤,理解一下,發生小丑竟是我...



小弟弟的原意,語法如下

執行一段語法由於可以能會發生例外錯誤,故用上 try catch 包裝,若例外發生,

則丟出例外,並停止往下執行




執行後,得到以下錯誤



一開始以為是 ROLLBACk TRAN 這一段的問題,問了AI 後,錯誤其實是在 THROW,

因為使用了 ROLLBACK TRAN 所以錯誤的上下文就會丟失,因為沒了上下文,故執行 THROW

就會發生錯誤


但若要維持使用 THROW ,就必須放棄 ROLLBACk TRAN




以上,雖能解決眼前問題,但是為 COMMIT TRAN 會存在問題,但若我們是設計funciton 

或是 StoredProcedure,丟出例外錯誤將控制權留給呼叫端



若要將流程控制保留在該指述中,此時我們調整語法




印出錯誤訊息,並且停止往下執行

最後 THROW 後面的參數各代表甚麼意思



其中,錯誤編號不能小於 50000,否則會出錯,以下是 AI 建議



訊息


狀態碼


一些常用的狀態碼建議





沒有留言:

張貼留言