Declare My_Cursor Cursor  FOR Select ClassID From CA_Global_Class  where ChannelID =@ChannelID order by Sortorderopen  My_Cursor
Fetch Next From My_Cursor 
into @SaveClassID
print @SaveClassIDwhile @@FETCH_Status=0 
BEGIN
  
    Fetch Next From My_Cursor 
into @SaveClassID
print @SaveClassID
END
Close My_Cursor
deallocate My_Cursor
结果为
203
202
205
206
206
最后一个结果读了两次

解决方案 »

  1.   

    建议你将每次的@@FETCH_Status也打印出来,看两个206,是不是一次是成功的时候打印的,一次是失败的时候打印的,如果是的话,就要改你的while控制语句了
      

  2.   

    你这样试试看Declare My_Cursor Cursor  FOR Select ClassID From CA_Global_Class  where ChannelID =@ChannelID order by Sortorderopen  My_Cursor
    Fetch Next From My_Cursor 
    into @SaveClassIDwhile @@FETCH_Status=0 
    BEGIN
       print @SaveClassID
       Fetch Next From My_Cursor 
    into @SaveClassIDEND
    Close My_Cursor
    deallocate My_Cursor
      

  3.   

    changkimkim()  你现在这个结果是对拉,但是最后一次的值没有得到啊 逻辑上不对啊
      

  4.   

    billclinton8(失恋的鱼) 
    老兄,你自己再仔细琢磨一下吧,逻辑非常正确
    最后一次的值没得到的话,怎么会输出来的呢?
      

  5.   

    呵呵,逻辑是不对的。
    Fetch后应该马上判断状态并且如果没有数据用Break退出循环。
      

  6.   

    GaoFX(紫龙) 您说的是我的逻辑不对吗?
    如果是的话,还要请你再仔细看看代码了while 循环会判断 @@FETCH_Status状态
    如果取到最后一行后再往下取,这时@@FETCH_Status就不会等于0了
    就不会再运行
    BEGIN
       print @SaveClassID
       Fetch Next From My_Cursor 
             into @SaveClassID
    END
    这段代码了我敢保证代码的逻辑一点问题都没有,可以请高手来确认一下啊!
      

  7.   

    to changkimkim() 
    print @SaveClassID
       Fetch Next From My_Cursor 
             into @SaveClassID
    中的Fetch Next From My_Cursor 
             into @SaveClassID
    不是在提取数据吗  那么最后一次的值没有被输出啊
      

  8.   

    to changkimkim() 
    你的代码 当只有一条记录的确时候 应该输不出来啊
    Fetch Next From My_Cursor 
    into @SaveClassIDwhile @@FETCH_Status=0 
    BEGIN
       print @SaveClassID
       Fetch Next From My_Cursor 
    into @SaveClassIDEND
    当只有一条记录的时候 
    Fetch Next From My_Cursor 
    into @SaveClassID
    读取记录
    此时 @@FETCH_Status = -1
    那么我就获取不到记录啊
      

  9.   

    想到解决的办法了
    to changkimkim()  没有错因为 Fetch Next From My_Cursor 提取数据 它提取到最后的一条数据时候它无法判断是最后一条数据 所以@@FETCH_Status 还是为0 只有Fetch Next From My_Cursor  提取到的数据为null的时候 它才把@@FETCH_Status为-1 此时才结束  不过还是得谢谢大家
    declare @ChannelID int
    declare @saveClassID int
    set @channelID =2Declare My_Cursor Cursor  FOR Select  ClassID From CA_Global_Class  where ChannelID =2 order by Sortorderopen  My_Cursor
    Fetch Next From My_Cursor 
    into @SaveClassID
    IF(@SaveClassID is not null)
    BEGIN
    print @SaveClassID
    END
    while @@FETCH_Status=0 
    BEGIN
       SET @SaveClassID= null
       Fetch Next From My_Cursor 
       into @SaveClassID
    IF(@SaveClassID is not null)
    BEGIN
    print @SaveClassID
    ENDEND
    Close My_Cursor
    deallocate My_Cursor