begin tran;
update TFather set FName='111' where FID=1;
delete TFather where FID=1; --(故意會出錯的一行指令)
update TFather set FName='222' where FID=2;
if (@@ERROR<>0)
rollback tran;
else
commit tran;
我們通常會希望如果上面三行SQL指令有錯,自動RollBack 所有資料。然而,實際情況並非如此。他只會RollBack中間那行指令。第一、第三行指令都會被執行且修改到資料庫裡。這問題的解法,是要執行一行指令於 begin tran 之前:
SET XACT_ABORT ON
完整程式如下:
SET XACT_ABORT ON
begin tran;
update TFather set FName='111' where FID=1;
delete TFather where FID=1;
update TFather set FName='222' where FID=2;
if (@@ERROR<>0)
rollback tran;
else
commit tran;
沒有留言:
張貼留言