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

多个存储过程怎么共用一个事务?不然的话,只能采用嵌套事务了

2013-08-04 
多个存储过程如何共用一个事务?不然的话,只能采用嵌套事务了。有A、B、C三个存储过程,它们被其它多个存储过程

多个存储过程如何共用一个事务?不然的话,只能采用嵌套事务了。
有A、B、C三个存储过程,它们被其它多个存储过程所调用,也有可能只执行A、B、C三者本身。

那我想达到这么一个效果:

执行A、B、C存储过程时,首先判断事务是否已经开启,如果事务已经被开启的话,那说明有别的存储过程来调用了A、B、C, 就继续执行 Try Catch中保护的代码。  如果事务没有开启的话,就在A、B、C内部Try Catch代码之间开启一个新的事务。

如果每个存储过程都建立事务的话,那多个存储过程一起执行的时候,事务所开销的资源就非常大,会使系统变慢数据库执行时间变长。

如果多个存储过程共用一个事务的话,如何解决在第N个存储过程执行出错后,使整个事务完整的退回呢? 事务 数据库
[解决办法]

引用:
执行A、B、C存储过程时,首先判断事务是否已经开启,如果事务已经被开启的话,那说明有别的存储过程来调用了A、B、C, 就继续执行 Try Catch中保护的代码。  如果事务没有开启的话,就在A、B、C内部Try Catch代码之间开启一个新的事务。


判断事务是否开启?
有这玩意?

引用:
如果每个存储过程都建立事务的话,那多个存储过程一起执行的时候,事务所开销的资源就非常大,会使系统变慢数据库执行时间变长。
如果多个存储过程共用一个事务的话,如何解决在第N个存储过程执行出错后,使整个事务完整的退回呢?


事务会有多大开销……?
你有数据支持……?

你的执行思路有问题吧?
下面这样执行并不觉得会有什么开销或者判断问题吖……
DECLARE @Error1 int,@Error2 int,@Error3 int,@Error4 int
BEGIN TRANSACTION

执行存储过程1
Set @Error1 = @@error 

执行存储过程2
Set @Error2 = @@error 

执行存储过程3
Set @Error3 = @@error 

IF @ERROR1>0 or @ERROR2>0 or @ERROR3>0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
COMMIT TRANSACTION

[解决办法]
判断@@TransCount
[解决办法]
存储过程中的  事务  以  最外面的存储过程中的事物为主

BEGIN TRANSACTION
  exec sp1
exec sp2

rollback 或者 commit; //以这句为主,并不以sp1,或者sp2中的为主
end 

热点排行