日期:2014-05-17  浏览次数:20443 次

存储过程中如果嵌套了多个事务有什么实际用吗?
一个存储过程中如果嵌套了多个事务,还是要等最后一个的commit提交才生效。 当中有再多的beigin,rollback,好像没什么用啊。 这个嵌套到底有什么意义吗? 难道就是为了方便阅读吗?
------解决方案--------------------
不会啊,commit/rollback是对应单独的事务,一个存储过程可以有多个
------解决方案--------------------
这个存储过程确实没必要嵌套n多的事务。

只有一种情况下,就是用savepoint xx,然后你可以commit xx 或者rollback xx。

------解决方案--------------------
事务只是保证事务内部操作具有原子性,事务能够嵌套只是提供逻辑上的支持,至于业务怎么用那要看你自己怎么设计。
------解决方案--------------------
引用:
Quote: 引用:

多个事务,建议每个事务都有独立的事务名,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 @TransactionName
insert into Student values('998887','孙大圣','工商管理','99') --这条插入后,马上回滚
save transaction @TransactionName
rollback transaction @TransactionName


commit transaction
end


这样写提示差一个commit,如果我想实现实现插入小马哥,不插入孙大圣;
插入小马哥是一个子事务,不插入孙大圣是一个子事务,写在一个存储过程中,该怎么改啊?


改成这样试试:

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

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

多个事务,建议每个事务都有独立的事务名,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 @TransactionName
insert into Student values('998887','孙大圣','工商管理','99') --这条插入后,马上回滚
save transaction @TransactionName
rollback transaction @TransactionName


commit transaction
end


这样写提示差一个commit,如果我想实现实现插入小马哥,不插入孙大圣;
插入小马哥是一个子事务,不插入孙大圣是一个子事务,写在一个存储过程中,该怎么改啊?


改成这样试试:

create procedure  test_pro
as
begin

DECLARE @TransactionName varchar(20) 
set  @TransactionName ='Transaction1'

--想实现插入小马哥,不插入孙大圣
begin transaction

insert into Student values('998888','小马哥','国际贸易','22') --就插入这一条

--注释这里就可以
---begin tran