我的游标是这样的,数据一共两条,为什么我不能取到第一条记录而且第二条
记录取到了两次,请帮我看看是不是游标写的有问题?DECLARE @NAME VARCHAR(255),@NEIRONG VARCHAR(255),@TIME numeric(18,2),@QTY  numeric(18,2)
DECLARE Gongzuoliang_Cursor CURSOR FOR
SELECT 担当者,工作内容,sum(时间),sum(数量) FROM Rep_D29 WHERE 作业日期 between @begintime and @endtime GROUP BY 担当者,工作内容OPEN Gongzuoliang_CursorFETCH NEXT FROM Gongzuoliang_Cursor INTO @NAME,@NEIRONG,@TIME,@QTY
  
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Gongzuoliang_Cursor  INTO @NAME,@NEIRONG,@TIME,@QTY
   if  @NEIRONG= '第二次提货' 
    set @QTY=@QTY/@ldt_erti
  else if @NEIRONG='入库确认数量'
    set @QTY=@QTY/@ldt_ruku
  else if @NEIRONG='分类数量'
   set @QTY=@QTY/@ldt_fenlei
  else if  @NEIRONG='贴表贴'
   set @QTY=@QTY/@ldt_biaotie
  else if  @NEIRONG='封口'
   set @QTY=@QTY/@ldt_fenkou
  else if  @NEIRONG='检品'
   set @QTY=@QTY/@ldt_jianpin
  else if  @NEIRONG='检品捆包'
   set @QTY=@QTY/@ldt_jianpinkunbao
  else if  @NEIRONG='上货架'
   set @QTY=@QTY/@ldt_shanghuojia
  else if  @NEIRONG='提货'
   set @QTY=@QTY/@ldt_tihuo
  else if  @NEIRONG='盘点'
   set @QTY=@QTY/@ldt_pandian
  else if  @NEIRONG='移库'
   set @QTY=@QTY/@ldt_yiku
 else 
   set @QTY=@QTY  
  insert into temp values(@NAME,@NEIRONG,@QTY)
END
CLOSE Gongzuoliang_Cursor
DEALLOCATE Gongzuoliang_Cursor

解决方案 »

  1.   


    DECLARE @NAME VARCHAR(255),@NEIRONG VARCHAR(255),@TIME numeric(18,2),@QTY  numeric(18,2)
    DECLARE Gongzuoliang_Cursor CURSOR FOR
    SELECT 担当者,工作内容,sum(时间),sum(数量) FROM Rep_D29 WHERE 作业日期 between @begintime and @endtime GROUP BY 担当者,工作内容OPEN Gongzuoliang_CursorFETCH NEXT FROM Gongzuoliang_Cursor INTO @NAME,@NEIRONG,@TIME,@QTY
      
    WHILE @@FETCH_STATUS = 0
    BEGIN
    --FETCH NEXT FROM Gongzuoliang_Cursor  INTO @NAME,@NEIRONG,@TIME,@QTY
       if  @NEIRONG= '第二次提货' 
        set @QTY=@QTY/@ldt_erti
      else if @NEIRONG='入库确认数量'
        set @QTY=@QTY/@ldt_ruku
      else if @NEIRONG='分类数量'
       set @QTY=@QTY/@ldt_fenlei
      else if  @NEIRONG='贴表贴'
       set @QTY=@QTY/@ldt_biaotie
      else if  @NEIRONG='封口'
       set @QTY=@QTY/@ldt_fenkou
      else if  @NEIRONG='检品'
       set @QTY=@QTY/@ldt_jianpin
      else if  @NEIRONG='检品捆包'
       set @QTY=@QTY/@ldt_jianpinkunbao
      else if  @NEIRONG='上货架'
       set @QTY=@QTY/@ldt_shanghuojia
      else if  @NEIRONG='提货'
       set @QTY=@QTY/@ldt_tihuo
      else if  @NEIRONG='盘点'
       set @QTY=@QTY/@ldt_pandian
      else if  @NEIRONG='移库'
       set @QTY=@QTY/@ldt_yiku
     else 
       set @QTY=@QTY  
      insert into temp values(@NAME,@NEIRONG,@QTY)
    --应该是放在这里
    FETCH NEXT FROM Gongzuoliang_Cursor  INTO @NAME,@NEIRONG,@TIME,@QTY
    END
    CLOSE Gongzuoliang_Cursor
    DEALLOCATE Gongzuoliang_Cursor
      

  2.   

    OPEN Gongzuoliang_CursorFETCH NEXT FROM Gongzuoliang_Cursor INTO @NAME,@NEIRONG,@TIME,@QTY--这句不用BEGIN
    FETCH NEXT FROM Gongzuoliang_Cursor  INTO @NAME,@NEIRONG,@TIME,@QTY  --这句也不用,把它加到 End 前面
      

  3.   

    哈哈,你的FETCH NEXT 放错了位置,放到下面就OK了。