在撰寫一支加了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 的頭像
nelman

nelman

nelman 發表在 痞客邦 留言(0) 人氣(7,568)