如下语句只能执行一次:
use js_amisdeclare @acc_code char(7) 
declare @moneyin_dur smallint 
print '---'
declare cur_1 cursor for 
    select distinct acc_code,moneyin_dur from acc_comm_rate
open cur_1 
while (1=1)
begin 
    print @@fetch_status
    if @@fetch_status <> 0 break 
    fetch cur_1 into @acc_code,@moneyin_dur 
    print '111'
end 
print '-----'
close cur_1
deallocate cur_1第二次执行时显示@@ftech_status 为 -1 我已将其关闭了,我以前其它的语句也是这样写的可以重复执行。
请高人指点一二。万分感谢。

解决方案 »

  1.   

    楼主这语句当然只执行一次了。
     if @@fetch_status <> 0 break  就是因为这句。稍微改了下。
    declare cur_1 cursor for 
        select distinct acc_code,moneyin_dur from acc_comm_rate 
    open cur_1 
    while @@fetch_status = 0 
    begin 
    .......
        fetch cur_1 into @acc_code,@moneyin_dur  
    end 
    print '-----' 
    close cur_1 
    deallocate cur_1 
      

  2.   

    谢谢!
    这样也只能执行一次。
    将实表改为临时表可以执行多次。
    或按帮助中将fetch next  from cur_1 into @acc_code,@moneyin_dur  用两次才行。
    (游标打开时执行一次,循环时再执行一次)
    不明白这是为什么?
    declare @acc_code char(7) 
    declare @moneyin_dur smallint 
    drop table #tmp
       select distinct acc_code,moneyin_dur into #tmp
        from acc_comm_rate
    declare cur_1 cursor for 
        select * from #tmp
        
    open cur_1 
    --fetch next  from cur_1 into @acc_code,@moneyin_dur 
    --while (@@fetch_status = 0 )
    while (1=1)
    begin 
        fetch cur_1 into @acc_code,@moneyin_dur 
        if @@fetch_status <> 0 break 
        
        print @acc_code + ' ' + convert(char(20),@moneyin_dur)
         
        --fetch next from  cur_1 into @acc_code,@moneyin_dur 
            
    end close cur_1
    deallocate cur_1
      

  3.   

    --定义变量用于接收游标行数据
    use book
    drop  table #tmp
    select * into #tmp from student
    go/*
    1定义游标
    2打开游标
    3提示数据
    4关闭游标
    5销毁游标
    */
    declare @stuid varchar(4),@stuName varchar(20),@major varchar(20)
    declare csr  cursor  for
    select * from student
    open csr
    fetch from csr into @stuid,@stuName,@major --提取一行到游标
    while(1=1)
    begin
    if(@@fetch_status<>0)
    break
    print @stuid
    fetch  from csr into @stuid,@stuName,@major--提取下一行到游标
    end
    close csr
    deallocate   csr   
      

  4.   

    先fetch 一次,才能保证@@fetch_status中有不为0的值呀,你不fetch,就进循环,当然不行了。
      

  5.   

    要先执行以下这一句吧, 不FETCH怎么能得到
    @@fetch_status呢?
    fetch cur_1 into @acc_code,@moneyin_dur