什么情况下要使用到嵌套事务?

xyq1986 2015-11-18 10:35:17
嵌套事务里的最外层事务提交和回滚都能控制到内层事务的提交和回滚,那这样为什么还要用嵌套事务?
...全文
520 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-11-19
  • 打赏
  • 举报
回复
主要看需求有没有这个必要。 比如这样的场景:
BEGIN TRAN
	循环100张订单
	BEGIN
		BEGIN TRAN --1张订单作为一个子事务
		...
		ROLLBACK TRAN --订单有自己的明细,如果某个明细有错,只回滚这个订单
		COMMIT TRAN   --全部明细处理成功,则递交这个订单
	END
  
	对处理成功的订单汇总,比如进行汇总支付

ROLLBACK TRAN --如果支付不成功,所有订单必须回滚
COMMIT TRAN   --如果支付成功,整体递交
tcmakebest 2015-11-19
  • 打赏
  • 举报
回复
我觉得嵌套事务应该是使用事务的地方偶然组合而成,内部的事务不需要知道外部也有事务,外部也不知道内部有事务, 当两者结合的时候,外部事务当然必须能够回滚内部提交的事务,而内部事务的回滚只是自己的那一小块而已。
misterliwei 2015-11-19
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
主要看需求有没有这个必要。 比如这样的场景:
BEGIN TRAN
	循环100张订单
	BEGIN
		BEGIN TRAN --1张订单作为一个子事务
		...
		ROLLBACK TRAN --订单有自己的明细,如果某个明细有错,只回滚这个订单
                ^^^^^^^^
                这会回滚整个事务

		COMMIT TRAN   --全部明细处理成功,则递交这个订单
	END
  
	对处理成功的订单汇总,比如进行汇总支付

ROLLBACK TRAN --如果支付不成功,所有订单必须回滚
COMMIT TRAN   --如果支付成功,整体递交
.....
misterliwei 2015-11-18
  • 打赏
  • 举报
回复
应该是这样的,你当然可以自己写嵌套事务,比如:

BEGIN TRAN
...
  BEGIN TRAN
  ......
  COMMIT TRAN
...
COMMIT TRAN
但是这种情况比较少,更多的情况我想应该是不同模块之间的调用 而形成的嵌套事务,比如:一个存储过程中有一个事务,而该存储 过程又被另一个事务调用执行,于是形成了嵌套;还有就是触发器 执行等等这样形成的事务嵌套。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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