读书人

sql 主次存储过程 事务处理有关问题

发布时间: 2012-04-13 13:50:24 作者: rapoo

sql 主次存储过程 事务处理问题
现在有 一个 主存储过程 主存储过程调用 两个次存储过程
主存储过程有 事务 处理 两个次存储过程 没有事务处理


主存储过程 往 A表插入数据

主 调用 次存储过程① 往B表插入数据 成功返回 0 失败 返回 -1

主存储过程 接受返回值 0 正常执行 -1 执行回滚

主 调用 次存储过程② 一个 往C表插入数据 成功返回 0 失败 返回 -1

主存储过程 接受返回值 0 正常执行 -1 执行回滚
主存储过程 往 D表插入数据


如果 次存储过程① 执行失败 主存储过程 会 回滚, 会把 次存储过程① 执行的 也回滚吗?


如果 次存储过程② 执行失败 主存储过程 会回滚, 会把 次存储过程① 和 次存储过程② 执行的 也回滚吗?

如果 主存储过程 往 D表插入数据 执行失败 次存储过程①和次存储过程② 都会回滚吗?



[解决办法]
你在处理的过程中,把数据提交的语句commit;放在最后一步即可.
[解决办法]

探讨
引用:
你在处理的过程中,把数据提交的语句commit;放在最后一步即可.

在主存储过程 中 最后一步 写 commit 吗?  写了的话  不管 次存储过程 写不写 回滚  
在 主存储过程中 写了 事务的话   回滚的时候 也会把 次存储过程的  插入 回滚  是这个意思吗??

[解决办法]
两个建议:
1、如果不确定的话,可以在两个次存储过程上都是用事务
2、既然需求很明确,自己测试一下不就清楚了,与其等别人给你答案,还不如自己动手去测试

另:答案是会回滚
[解决办法]
会回滚。不信就自己测试下OK
[解决办法]
原则上讲,遇到rollback tran即会回滚[上一个begin tran]到[rollback tran]之间的所有数据变更.

至于楼主的问题,得看你的begin tran,commit tran,rollback tran如何放了,放置正确自然可以回滚.
[解决办法]
放最外层,最后面

读书人网 >SQL Server

热点推荐