长了点,没仔细看你的具体事务
好像问题出在
if @tran_point=0
begin tran tran_lsrq
else
save tran tran_lsrqexec @return=SOF_getmaxbh 'JZH',2,@jzhh OUTPUT
if @return>0
goto err_lab
这一段。
按照这段程序流程,不管事务执行不执行都通过判断@return的值跳转到err_lab
建议改为下面的试一下:
if @tran_point<>0
save tran tran_lsrq
else
begin
begin tran tran_lsrqexec @return=SOF_getmaxbh 'JZH',2,@jzhh OUTPUT
if @return>0
goto err_lab
……(事务执行过程)
enderr_lab:
rollback tran tran_lsrq
return_lab:
return @returnGO
好像问题出在
if @tran_point=0
begin tran tran_lsrq
else
save tran tran_lsrqexec @return=SOF_getmaxbh 'JZH',2,@jzhh OUTPUT
if @return>0
goto err_lab
这一段。
按照这段程序流程,不管事务执行不执行都通过判断@return的值跳转到err_lab
建议改为下面的试一下:
if @tran_point<>0
save tran tran_lsrq
else
begin
begin tran tran_lsrqexec @return=SOF_getmaxbh 'JZH',2,@jzhh OUTPUT
if @return>0
goto err_lab
……(事务执行过程)
enderr_lab:
rollback tran tran_lsrq
return_lab:
return @returnGO
然后再尝试加上。
那些过程中,使用rollback tran 直接把事务栈给清0了。
检查你调用的其他存储过程的事务处理方法。和这个存储过程统一。