在撰寫一支加了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之中


 

nelman 發表在 痞客邦 PIXNET 留言(0) 人氣()