循环错了if (@deletecount=0 and @insertcount>0) begin--插入情况
declare cursor_rckjl cursor for
select kjnd,kjqj,ssckmc,clbh,clsl,clje,bz
from inserted
order by ssckmc,
 clbh
open cursor_rckjl fetch next
from cursor_rckjl
into @kjnd,@kjqj,@ssckmc,@clbh,@clsl,@clje,@bz while(@@Fetch_status=0) begin
if @bz=1 or @bz=5 begin
update Ck_main set bqrk_sl=bqrk_sl+@clsl,bqrk_je=bqrk_je+@clje where kjnd=@kjnd and kjqj=@kjqj and ckmc=@ssckmc and clbh=@clbh
end
else begin
update Ck_main set bqck_sl=bqck_sl+@clsl,bqck_je=bqck_je+@clje where kjnd=@kjnd and kjqj=@kjqj and ckmc=@ssckmc and clbh=@clbh
end
fetch next
from cursor_rckjl
into @kjnd,@kjqj,@ssckmc,@clbh,@clsl,@clje,@bz
end
close cursor_rckjl
deallocate cursor_rckjl
end

解决方案 »

  1.   

    把游标处理过程改为下面的格式:
    open cursor_rckjl
    fetch next from cursor_rckjl into @kjnd,@kjqj,@ssckmc,@clbh,@clsl,@clje,@bz
    while(@@Fetch_status=0) 
    begin
        if 
        ...
        else
        ...
    fetch next from cursor_rckjl into @kjnd,@kjqj,@ssckmc,@clbh,@clsl,@clje,@bz
    end
    close cursor_rckjl
    deallocate cursor_rckjl
      

  2.   

    其实可以不用游标if (@deletecount=0 and @insertcount>0) 
    update m 
    set bqrk_sl=m.bqrk_sl+case when bz=1 or bz=5 then clsl else 0 end,
    bqrk_je=m.bqrk_je+case when bz=1 or bz=5 then clje else 0 end,
    bqck_sl=m.bqck_sl+case when bz=1 or bz=5 then 0 else clsl end,
    bqck_je=m.bqck_je+case when bz=1 or bz=5 then 0 else clje end
    from Ck_main m,inserted i
    where m.kjnd=i.kjnd and m.kjqj=i.kjqj and m.ckmc=i.ssckmc and m.clbh=i.clbh