我试着把
update ZY_LSYZ  
set LSJ= YP.yplsj,PFJ=Yp.ypPFj,zfje=zfje * Yp.YpLsj/Yz.Lsj,gfje = gfje* Yp.YpLsj/Yz.Lsj 
from  ZY_LSYZ yz 
inner join ykyf_ks ks on ks.KSBH=yz.ZXKS 
inner Join yf_dtkc yp on  yp.ypID = yz.YPXMBM and yp.YFKS=ks.BH and yp.pc=yz.pc 
where yp.yplsj <> yz.lsj and yz.lsj <>0 and substring(XZKS,1,6)=substring(@xzks,1,6) and yz.YPXMLX <>'4' and yz.YPXMLX <>'5' and (yz.ytbz='1' and yz.ytbz='5') and blh=@blh 
if @@error <>0 goto dofail 删除就可以,不懂是什么原因。

解决方案 »

  1.   

    找到问题,是zy_lsyz里的触发器有问题。想问下触发器里能否加回滚,如下:CREATE TRIGGER [ZY_LSYZ_TRIGGER] ON dbo.ZY_LSYZ 
    FOR  UPDATE 
    AS
    set transaction isolation level read uncommitted
    --begin Transaction
    declare @ybsflx char(4),@date datetime
    set @date=getdate()
    set @ybsflx=(select ybsflx from zd_zhk where ybsflx<>'')
      if update(ytbz)
        begin
          if exists(select * from inserted where ytbz='4')
            begin
      insert into zy_dxsf(blh,zycs,sfks,zyks,xzks,xzys,sfrq,yzm,zfje,gfje,yzbh,yzlx,gg,jldw,zl,lsj,pfj,xmsx,sfdm,fpdm,ypbz,ypxmlx,sfry,ypxmbm,PC,
                                  YPYT,YCYL,YF,YFSM,SQSJ,YYJG,SQRY,jdry,jdrq,yfdqbz)
                      select      s.blh,s.zycs,s.zxks,t.ksbh,s.xzks,s.xzys,sqrq,s.ym, s.zfje,s.gfje,s.yzbh,'l', s.gg,s.dw,  s.zl,s.lsj,s.pfj,s.xmsx,
                                  s.sfdm,s.fpdm,s.ypsx,s.ypxmlx,s.rybh,s.ypxmbm,S.PC,s.YPYT,s.YCYL,s.YF,s.YFSM,s.SQSJ,s.YYJG,s.SQRY,s.jdry,s.jdrq,s.yzrylx
                       from       inserted s,zy_brzl t
               where      s.ytbz='4' and s.blh=t.blh and s.zycs=t.zycs
              if @@error!=0
                begin
                  raiserror('系统错误',16 ,1)
                  rollback tran
                  return
                end
              else
                begin             update s                                     --修改病人资料表的自费金额,公费金额,结算剩余
             set s.fyhj=s.fyhj+(select isnull(sum(g.zfje),0) from inserted g  where t.ytbz='4' group by g.blh,g.zycs
                                      having s.blh=g.blh and s.zycs=g.zycs), 
        
                    s.gfhj=s.gfhj+(select isnull(sum(g.gfje),0) from inserted g  where t.ytbz='4' group by g.blh,g.zycs
                                      having s.blh=g.blh and s.zycs=g.zycs),                  s.jssy=s.yjf-s.fyhj-(select isnull(sum(g.zfje),0) from inserted g  where t.ytbz='4' group by g.blh,g.zycs
                                      having s.blh=g.blh and s.zycs=g.zycs) 
     
              from zy_brzl s,inserted t               where s.blh=t.blh and s.zycs=t.zycs
      
                  if @@error!=0
                    begin
                      raiserror('系统错误',16 ,1)
                      rollback tran
                      return
                  
                    end     
       
                  update zy_lsyz                                --修改病人临时医嘱表的用停标志ytbz =5
                    set ytbz='5'
                    where ytbz='4'
                 
                  if @@error!=0
                    begin
                      raiserror('系统错误',16 ,1)
                      rollback tran
                      return
                  
                    end  
               end
          end
    --     commit Transaction
    --     return
        end
      

  2.   

    应该可以,EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。 
    这个错误是你代码中commit和rollback没有匹配好.
    仔细检查一下
      

  3.   

    尽量少使用goto,
    看的头晕~
    自己检查一下把,