我有一个可以工作但可以跳过其他所有记录的游标。我的接下来看起来像这样
OPEN DemandCur
While 1 = 1
BEGIN
FETCH NEXT FROM DemandCur INTO
@----,
@+++++
select @index = (select demand from TechCoDemand where Date = '2014-11-30')
IF @index <= 0 BREAK;
IF @@FETCH_STATUS <> 0 BREAK;
FETCH NEXT FROM DemandCur INTO
@---,
@++++
End
Close DemandCur
Deallocate DemandCur
我把它改成了
FETCH NEXT
它停止了跳过记录,但在查询完成后我收到一条错误消息:
Msg 16916,Level 16,State 1,Line 121
名称为“NEXT”的光标不存在。
答案 0 :(得分:0)
将您的代码更改为此....
OPEN DemandCur
FETCH NEXT FROM DemandCur INTO @----, @+++++
While @@FETCH_STATUS = 0
BEGIN
select @index = (select demand from TechCoDemand where Date = '2014-11-30')
IF @index <= 0 BREAK;
FETCH NEXT FROM DemandCur INTO @---, @++++
END
Close DemandCur
Deallocate DemandCur
答案 1 :(得分:0)
正如其他人在上面的评论中提到的那样,你在while循环中提取了两次。虽然(哈!)你确实需要&#34;灌注泵&#34; (可以这么说)首先在while循环之外取一行,这里有一个我喜欢用来完全避免它的习语。
declare cursor foobar for
select ...
open foobar
while(1=1)
begin
fetch next from foobar into ...
if (@@fetch_status <> 0)
break
--process results
end
close foobar
deallocate foobar
这样做的好处是只需要维护一个fetch语句,但与此对话更密切相关,可以完全避免错误。