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

skyclin 2013-07-25 09:51:07
有A、B、C三个存储过程,它们被其它多个存储过程所调用,也有可能只执行A、B、C三者本身。

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

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

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

如果多个存储过程共用一个事务的话,如何解决在第N个存储过程执行出错后,使整个事务完整的退回呢?
...全文
239 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kunshan 2013-07-27
  • 打赏
  • 举报
回复
存储过程中的 事务 以 最外面的存储过程中的事物为主 BEGIN TRANSACTION exec sp1 exec sp2 rollback 或者 commit; //以这句为主,并不以sp1,或者sp2中的为主 end
Q315054403 2013-07-26
  • 打赏
  • 举报
回复
判断@@TransCount
hgwyl 2013-07-25
  • 打赏
  • 举报
回复
引用 楼主 skyclin 的回复:
执行A、B、C存储过程时,首先判断事务是否已经开启,如果事务已经被开启的话,那说明有别的存储过程来调用了A、B、C, 就继续执行 Try Catch中保护的代码。 如果事务没有开启的话,就在A、B、C内部Try Catch代码之间开启一个新的事务。
判断事务是否开启? 有这玩意?
引用 楼主 skyclin 的回复:
如果每个存储过程都建立事务的话,那多个存储过程一起执行的时候,事务所开销的资源就非常大,会使系统变慢数据库执行时间变长。 如果多个存储过程共用一个事务的话,如何解决在第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

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧