求一个sqlserver相关的技术 问题,等待中。。谢谢!~(200分)

  • 主题发起人 主题发起人 crazyD
  • 开始时间 开始时间
C

crazyD

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有两个存储过程A,B,在两个存储过程中都实现了事务。
A中需要循环调用B,如何实现回滚?
因为有好几种情况
1,A在未调用B时就出错,这个应该没有问题
2,A在第一次调用B时就出错,这个也应该没有问题
3,A在第一次调用B时正常返回,后来又出错,这时的回滚是否还能回到第一次调用B时的状态?
4,A正常调用B,调用完了之后在执行A里面的数据出错,B中的数据是否还能回滚??
 
SF...顶一个..
 
好像不行,如果B里面已经提交了的哈u
 
在B存储过程中不提交 最后在A最后提交
 
高手啊 并不一定都要用存储过程的!
 
楼主的问题有点让人费解。两种可能都写给你参考:
1、A 或 B 中任意事务出错都回滚
begin Tran
try
exec A { exec B}
commit Tran
except
rollback Tran //回到try之前的状态
end;
2、保留B的正确部分
var
isSec:boolean;
begin
exec A { begin tran
try
isSec:=exec(B)
if not isSec then abort;
commit tran
except
Rollback tran;
end;
}
 
存储过程业有返回值 返回0表示没出错

declare proc a
as
declare @i int
declare @ret int
set @i=0
while @i<10
begin
begin Trans
call @ret=B
set @i = @i+1
if @ret=0
commit
else
rollback
end
 
后退
顶部