----测试嵌套过程与回滚问题(事务嵌套的层次数(标记)都是存储在@@trancount变量里的)
select top 4 * from dbo.Atype order by rec
/*
--可以使用一个变量来记录事务是否是嵌套的,若是嵌套则应用SAVE来另保存一个事务。
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
-- Procedure called when there is
-- an active transaction.
-- Create a savepoint to be able
-- to roll back only the work done
-- in the procedure if there is an
-- error.
SAVE TRANSACTION ProcedureSave;
ELSE
-- Procedure must start its own
-- transaction.
BEGIN TRANSACTION;
*/
SAVE TRANSACTION ProcedureSave1; --不会对@@trancount有影响,只是产生一个事务标记
--begin tran upa --@@trancount+1=1
update dbo.Atype
set name='修改333s'
where rec=3
SAVE TRANSACTION ProcedureSave2;
--begin tran upb --@@trancount+1=2
update dbo.Atype
set name='修改222s'
where rec=2
SAVE TRANSACTION ProcedureSave3;
--begin tran upc --@@trancount+1=3
update dbo.Atype
set name='修改111s'
where rec=1
--ROLLBACK TRANSACTION ProcedureSave3;
--rollback tran upc --置@@trancount=0
--commit tr
SQL之事务、回滚和TRY
最新推荐文章于 2023-03-09 00:15:39 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)