CREATE proc lstable1 
@IDcode varchar(100)as truncate table lsdeclare cur_ls cursor
   for select 收款单位,品名,等级,SDate,EDate from 付款凭证 where order_id=@IDcode
open cur_ls
declare 
@CusName Varchar(100),
@StartTime datetime,
@EndTime datetime,
@Mname varchar(100),
@GradeName varchar(100)if @@error =0
  begin
  while @@fetch_status=0
      begin
       fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime
       if @@fetch_status=0
          begin        insert ls(品名,等级,数量,ID) 
          select Mname,GradeName,Jweight,IDcode from 
             app_v_ponderation where 
             (jweight is not null) and 
             (CusName like @CusName)  and 
             (Mname like @Mname) and
             (GradeName like @GradeName) and
             (billdate between @starttime and @endtime) and 
             (re like '%入%') 
              order by id
            end
         else
            break
         end
   end
close cur_ls
deallocate cue_lsGO

解决方案 »

  1.   

    --参考,你的貌似少了一个fetch
    DECLARE t_Cursor CURSOR FOR
    select * ……
    OPEN t_Cursor
    FETCH NEXT FROM t_Cursor into @a……
    WHILE @@FETCH_STATUS = 0
    BEGIN
    ……
    FETCH NEXT FROM t_Cursor into @a……
    END
    CLOSE t_Cursor
    DEALLOCATE t_Cursor
      

  2.   

    --tryCREATE proc lstable1 
    @IDcode varchar(100)as truncate table lsdeclare cur_ls cursor
       for select 收款单位,品名,等级,SDate,EDate from 付款凭证 where order_id=@IDcode
    open cur_ls
    declare 
    @CusName Varchar(100),
    @StartTime datetime,
    @EndTime datetime,
    @Mname varchar(100),
    @GradeName varchar(100)
     fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime  while @@fetch_status=0
          begin          insert ls(品名,等级,数量,ID) 
              select Mname,GradeName,Jweight,IDcode from 
                 app_v_ponderation where 
                 (jweight is not null) and 
                 (CusName like @CusName)  and 
                 (Mname like @Mname) and
                 (GradeName like @GradeName) and
                 (billdate between @starttime and @endtime) and 
                 (re like '%入%') 
                  order by id  fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime         endclose cur_ls
    deallocate cue_lsGO
      

  3.   

    为什么还要加一个FETCH,楼上可以说一下吗?
      

  4.   

    fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime--取下一行
    --第一个fetch只是取第一行
      

  5.   

    通俗的讲就是先fetch一下,然后才能判断@@fetch_status等于几啊。