当前位置: 代码迷 >> Sql Server >> 高分请问:存储过程使用事务,再调用其他存储过程的有关问题
  详细解决方案

高分请问:存储过程使用事务,再调用其他存储过程的有关问题

热度:62   发布时间:2016-04-24 09:50:51.0
高分请教:存储过程使用事务,再调用其他存储过程的问题,
有存储过程如下:
create proc proc_1()
as
begin
update table_1  ...
end

create proc proc_2()
as
begin
BEGIN TRAN
exec proc_1

update table_2...
IF @@error<>0
begin
ROLLBACK TRAN
RETURN
end

...
end


1、如果在调用proc_2的过程中,update table_2 语句发生错误回滚事务,会回滚之前调用的proc_1中更新的数据吗,
2、这样做有没有什么问题,或者必须注意些啥问题
------解决思路----------------------
1、必须回滚撒

2、注意记得COMMIT,虽然这可能是体现在省略号里面的~~问题嘛,没感觉有~~

如果是MSSQL 应该不用带()吧
------解决思路----------------------
也会回滚,因为你在同一个事务里了

引用:
Quote: 引用:

1、必须回滚撒

2、注意记得COMMIT,虽然这可能是体现在省略号里面的~~问题嘛,没感觉有~~

如果是MSSQL 应该不用带()吧


我的意思是:proc_1中更新的table1的数据是否也会回滚?

------解决思路----------------------
1、如果在调用proc_2的过程中,update table_2 语句发生错误回滚事务,会回滚之前调用的proc_1中更新的数据吗,
-->如果UPDATE table2失败,回滚时,前面存储过程中执行的更新也将回滚

2、这样做有没有什么问题,或者必须注意些啥问题 
-->就你贴的这几条语句,没什么问题.
------解决思路----------------------
这个很明显你只是在proc2中做了事务,没有在proc1中做事务,所以proc1的更新不会回滚
------解决思路----------------------
引用:
这个很明显你只是在proc2中做了事务,没有在proc1中做事务,所以proc1的更新不会回滚

会回滚~
------解决思路----------------------
全部都会回滚的。具体的你找本书看看吧,这是一个很基础的东西
------解决思路----------------------
引用:
全部都会回滚的。具体的你找本书看看吧,这是一个很基础的东西
单干回来啦?
------解决思路----------------------
exec proc_1
在事务回滚语中,
如果出错所有更新操作都会回滚。
  相关解决方案