日期:2014-05-18  浏览次数:20941 次

游标问题 最后一个结果读了两次
Declare   My_Cursor   Cursor     FOR   Select   ClassID   From   CA_Global_Class     where   ChannelID   =@ChannelID   order   by   Sortorder

open     My_Cursor
Fetch   Next   From   My_Cursor  
into   @SaveClassID
print   @SaveClassID

while   @@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
最后一个结果读了两次

------解决方案--------------------
最后一次取失败的时候,你还是会打印之前取的值吧
------解决方案--------------------
建议你将每次的@@FETCH_Status也打印出来,看两个206,是不是一次是成功的时候打印的,一次是失败的时候打印的,如果是的话,就要改你的while控制语句了
------解决方案--------------------
你这样试试看

Declare My_Cursor Cursor FOR Select ClassID From CA_Global_Class where ChannelID =@ChannelID order by Sortorder

open My_Cursor
Fetch Next From My_Cursor
into @SaveClassID

while @@FETCH_Status=0
BEGIN
print @SaveClassID
Fetch Next From My_Cursor
into @SaveClassID

END
Close My_Cursor
deallocate My_Cursor

------解决方案--------------------
呵呵,逻辑是不对的。
Fetch后应该马上判断状态并且如果没有数据用Break退出循环。
------解决方案--------------------
嗯,既然搞清楚了,就结贴吧,呵呵!!