我想用游标循环从table表中查询的记录,然后insert到另一个表table2.插入时候要插入num条记录。这里用while进行了判断。可是游标只执行了一次,就不往下取下一条记录了.找了半天资料都没有解决!各位大神们 帮帮小弟 跪谢了!declare @error int  
 declare @i int--临时变量 set @i=0
set @error=0  
BEGIN TRAN --申明事务 
 --申明第一个游标  
declare order_cursor CURSOR FOR select id,num from table where type =1 
 --打开游标  
open order_cursor  
DECLARE @tempid varchar(50),@tempnum int
 --开始循环游标变量 
FETCH NEXT FROM order_cursor INTO @tempid,@tempnumWHILE @@FETCH_STATUS = 0  begin 
  while @i<@tempnum
   begin 
    insert into table2(ID,CreateTime) values (@tempid,getdate())
    set @i=@i+1
   end
  --下一条记录 
  FETCH NEXT FROM order_cursor INTO @tempid,@tempnum
  set @error=@error+@@error   
 end if @error=0 
begin 
  commit tran  
end 
else 
begin 
  rollback tran  
end 
CLOSE order_cursorDEALLOCATE order_cursor  
END 

解决方案 »

  1.   

    你在里面循环完后没有给set @i=0
      

  2.   

     --下一条记录  
      FETCH NEXT FROM order_cursor INTO @tempid,@tempnum
      set @error=@error+@@error   
    -->
      set @error=@error+@@error   
     --下一条记录  
      FETCH NEXT FROM order_cursor INTO @tempid,@tempnum
      

  3.   

    FETCH NEXT 后任何语句都会修改@@FETCH_STATUS ,造成不能循环
      

  4.   


    WHILE @@FETCH_STATUS = 0 
    begin  
      while @i<@tempnum
      begin  
          insert into table2(ID,CreateTime) values (@tempid,getdate())
      set @i=@i+1
      end
      set @i=0  --下一条记录  
      FETCH NEXT FROM order_cursor INTO @tempid,@tempnum
      set @error=@error+@@error   
     end  
      

  5.   

    1楼说的也是个问题
    set @i=0
    放到@@FETCH_STATUS 循环内
      

  6.   

    --开始循环游标变量  
    FETCH NEXT FROM order_cursor INTO @tempid,@tempnumWHILE @@FETCH_STATUS = 0 begin  
      set @i= 0
      while @i<@tempnum
      begin  
      insert into table2(ID,CreateTime) values (@tempid,getdate())
      set @i=@i+1
      end
      set @error=@error+@@error   
      --下一条记录  
      FETCH NEXT FROM order_cursor INTO @tempid,@tempnum
     end  
      

  7.   

    在哪儿?为什么要set @i=0 那样岂不永远满足条件 死循环了不是
      

  8.   

    set @i=0放在游标里,到下一行的时候需要重复复制为0,否则如果上一条的@tempnum大于第二条的tempnum,@i<@tempnum这个条件一直不会成立。
      

  9.   

    ok了 就是 没有set @i=0 的问题 非常感谢!