多个存储过程如何共用一个事务?不然的话,只能采用嵌套事务了。
有A、B、C三个存储过程,它们被其它多个存储过程所调用,也有可能只执行A、B、C三者本身。
那我想达到这么一个效果:
执行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