一種是用TRY...CATCH語句,例:
---這僅僅是執行個體
create procedure [dbo].[MyTryTran] --建立預存程序
--@toID int, --接收轉賬的賬戶
--@fromID int , --轉出自己的賬戶
--@momeys money --轉賬的金額
as
begin transaction
BEGIN TRY
select 1/0
insert into t_Sex (FID,FSex) values (3,'na')
commit transaction
END TRY
BEGIN CATCH
begin
rollback transaction
end
END CATCH
第二種是捕捉error錯誤
create procedure [dbo].[MyTran] --建立預存程序,定義幾個變數--@toID int, --接收轉賬的賬戶--@fromID int , --轉出自己的賬戶--@momeys money --轉賬的金額as begin transactiondeclare @errorSum int --定義變數,用於累計事務執行過程中的錯誤set @errorSum=0 select 1/0set @errorSum=@errorSum+@@error --累計是否有錯誤insert into t_Sex (FID,FSex) values ('3','n')set @errorSum=@errorSum+@@error --累計是否有錯誤if @errorSum>0 begin rollback transaction endelse begin commit transaction end
有一種錯誤的方式,請看:
alter procedure [dbo].[MyErrorTran] as begin transactionselect 1/0insert into t_Sex (FID,FSex) values ('3','n')commit transactionif @@error>0 rollback transaction
--事實上不管用,因為@@error只對上一條語句管用,所以在本例中儘管發生了錯誤,但還是不會復原