多个存储过程如何共用一个事务?不然的话,只能采用嵌套事务了。
有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