save transaction 事务保存点,不增加减少事务计数@@TRANCOUNT。
使用save transaction mx 保存的事物点,可以rollback transaction 到事务保存点,但是commit就会提交整个事务。而不仅仅是事务点。
begin tran
begin tran b
begin tran c
select @@TRANCOUNT,'c1'
save transaction jkcmx -- 若是改为begin tran
select @@TRANCOUNT,'jkcmx1'
rollback transaction jkcmx --回到事务保存点 ,这里回滚就全部回滚或提交了,而不是只回滚当前事务jkcmx
select @@TRANCOUNT,'jkcmx2'
commit tran c
select @@TRANCOUNT,'c2'
commit tran b
select @@TRANCOUNT,'b2'
commit tran
select @@TRANCOUNT,'a2'
用户可以在事务内设置保存点或标记。保存点定义如果有条件地取消事务的一部分,事务可以返回的位置。如果将事务回滚到保存点,则必须(如果需要,使用更多的 Transact-SQL 语句和 COMMIT TRANSACTION 语句)继续完成事务,或者必须(通过将事务回滚到其起始点)完全取消事务。若要取消整个事务,请使用 ROLLBACK TRANSACTION transaction_name 格式。这将撤消事务的所有语句和过程。
save tran t3后,无论有没rollback tran t3,都得必须有后续的commit、rollback 操作。因为完整的事务未结束。
特别注意事务嵌套,内层用了save tran,后续的commit、rollback影响到外层的事务计数器。@@trancount