有存储过程如下:
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 应该不用带()吧
------解决思路----------------------
也会回滚,因为你在同一个事务里了
------解决思路----------------------
1、如果在调用proc_2的过程中,update table_2 语句发生错误回滚事务,会回滚之前调用的proc_1中更新的数据吗,
-->如果UPDATE table2失败,回滚时,前面存储过程中执行的更新也将回滚
2、这样做有没有什么问题,或者必须注意些啥问题
-->就你贴的这几条语句,没什么问题.
------解决思路----------------------
这个很明显你只是在proc2中做了事务,没有在proc1中做事务,所以proc1的更新不会回滚
------解决思路----------------------
这个很明显你只是在proc2中做了事务,没有在proc1中做事务,所以proc1的更新不会回滚
会回滚~
------解决思路----------------------
全部都会回滚的。具体的你找本书看看吧,这是一个很基础的东西
------解决思路----------------------
全部都会回滚的。具体的你找本书看看吧,这是一个很基础的东西
------解决思路----------------------
exec proc_1
在事务回滚语中,
如果出错所有更新操作都会回滚。