首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程中如若嵌套了多个事务有什么实际用吗

2014-01-19 
存储过程中如果嵌套了多个事务有什么实际用吗?一个存储过程中如果嵌套了多个事务,还是要等最后一个的commi

存储过程中如果嵌套了多个事务有什么实际用吗?
一个存储过程中如果嵌套了多个事务,还是要等最后一个的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 transaction @TransactionName
insert into Student values('998887','孙大圣','工商管理','99') --这条插入后,马上回滚
save transaction @TransactionName
rollback transaction @TransactionName


commit transaction
end

你说的也对,不过要把那个save 要放在insert的前面,就是7楼说的那样。
我的复合你要求了?

热点排行