游标问题 最后一个结果读了两次
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退出循环。
------解决方案--------------------嗯,既然搞清楚了,就结贴吧,呵呵!!