sql 主次存储过程 事务处理问题
现在有 一个 主存储过程 主存储过程调用 两个次存储过程
主存储过程有 事务 处理 两个次存储过程 没有事务处理
主存储过程 往 A表插入数据
主 调用 次存储过程① 往B表插入数据 成功返回 0 失败 返回 -1
主存储过程 接受返回值 0 正常执行 -1 执行回滚
主 调用 次存储过程② 一个 往C表插入数据 成功返回 0 失败 返回 -1
主存储过程 接受返回值 0 正常执行 -1 执行回滚
主存储过程 往 D表插入数据
如果 次存储过程① 执行失败 主存储过程 会 回滚, 会把 次存储过程① 执行的 也回滚吗?
如果 次存储过程② 执行失败 主存储过程 会回滚, 会把 次存储过程① 和 次存储过程② 执行的 也回滚吗?
如果 主存储过程 往 D表插入数据 执行失败 次存储过程①和次存储过程② 都会回滚吗?
------解决方案--------------------你在处理的过程中,把数据提交的语句commit;放在最后一步即可.
------解决方案--------------------
------解决方案--------------------
两个建议:
1、如果不确定的话,可以在两个次存储过程上都是用事务
2、既然需求很明确,自己测试一下不就清楚了,与其等别人给你答案,还不如自己动手去测试
另:答案是会回滚
------解决方案--------------------
会回滚。不信就自己测试下OK
------解决方案--------------------原则上讲,遇到rollback tran即会回滚[上一个begin tran]到[rollback tran]之间的所有数据变更.
至于楼主的问题,得看你的begin tran,commit tran,rollback tran如何放了,放置正确自然可以回滚.
------解决方案--------------------放最外层,最后面