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

大家好请教个游标执行问题
大家好请教个问题
 declare cursor_tb2 scroll cursor
 for select * from tb
 open cursor_tb2 
declare @id int ,@value varchar(10) 
fetch next from cursor_tb2 into @id,@value
 while @@fetch_status=0
 begin
 select * from tb 
where id=@id and value=@value
 fetch next from cursor_tb2 into @id,@value
 end
 ----------------------
 执行结果
 id value
 1 aa 

id value
 1 bb 

id value
 2 aaa 

id value
 2 bbb 

id value
 2 ccc 
--------------------------------------游标未释放
 declare @id int ,@value varchar(10) fetch next from cursor_tb2 into @id,@value
 while @@fetch_status=0
 begin
 select * from tb 
where id=@id and value=@value
 fetch next from cursor_tb2 into @id,@value
 end 
执行结果 没有结果,只返回消息:命令已成功完成。
 --------------------------------------------
 
为什么第二次执行的时候没有结果返回啊 ,请大家指点下谢谢
 附: tb表:id value1 aa
 1 bb
 2 aaa
 2 bbb
 2 ccc

------解决方案--------------------
游标未释放,第一次执行时@@fetch_status=0已经满足,第二次执行时一开始就是@@fetch_status=0了,所以你会看不到结果了.
程序运行结果是合理的.
------解决方案--------------------
游标未释放,已经到了最后一行,没有数据
------解决方案--------------------
游标指针已到最后一行,@@FETCH_STATUS=-1
 while @@fetch_status=0 --> 不成立
不会执行循环内的语句.