长了点,没仔细看你的具体事务
好像问题出在
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