在撰寫一支加了Transaction的T-SQL時,突然發現Transaction失效,且交易失敗時,竟沒有RollBack
虛擬碼如下
Begin Transaction
Do Loop
Update Record
End Loop
If @@Error<>0
RollBack Transaction
Else
Commit Transaction
說明:因資料的更新放在Loop中處理,所以@@Error所得到的值是最後一筆Update語法的失敗或成功訊息
若Loop中須更新十筆記錄,前九筆皆失敗,但最後一筆成功,以上的寫法仍舊不會被RollBack
解決方法1:於Begin Transaction上加入一行SET XACT_ABORT ON;即可
解決方法2:使用Begin Try ….End Try將Loop包起來,一旦發生錯誤後,將RollBack語法寫至Begin Catch…End Catch之中
全站熱搜
留言列表