存储过程中如果嵌套了多个事务有什么实际用吗?
一个存储过程中如果嵌套了多个事务,还是要等最后一个的commit提交才生效。 当中有再多的beigin,rollback,好像没什么用啊。 这个嵌套到底有什么意义吗? 难道就是为了方便阅读吗?
------解决方案--------------------不会啊,commit/rollback是对应单独的事务,一个存储过程可以有多个
------解决方案--------------------这个存储过程确实没必要嵌套n多的事务。
只有一种情况下,就是用savepoint xx,然后你可以commit xx 或者rollback xx。
------解决方案--------------------事务只是保证事务内部操作具有原子性,事务能够嵌套只是提供逻辑上的支持,至于业务怎么用那要看你自己怎么设计。
------解决方案--------------------
改成这样试试:
create procedure test_pro
as
begin
DECLARE @TransactionName varchar(20)
set @TransactionName ='Transaction1'
--想实现插入小马哥,不插入孙大圣
begin transaction
insert into Student values('998888','小马哥','国际贸易','22') --就插入这一条
--注释这里就可以
---begin transaction @TransactionName
insert into Student values('998887','孙大圣','工商管理','99') --这条插入后,马上回滚
save transaction @TransactionName
rollback transaction @TransactionName
commit transaction
end
------解决方案--------------------
多个事务,建议每个事务都有独立的事务名,rollback/commit会针对特定的事务名
create procedure test_pro
as
begin
DECLARE @TransactionName varchar(20)
set @TransactionName ='Transaction1'
--想实现插入小马哥,不插入孙大圣
begin transaction
insert into Student values('998888','小马哥','国际贸易','22') --就插入这一条
begin transaction&