光标每隔一行跳过一次

时间:2014-12-16 21:40:11

标签: sql sql-server cursor

我有一个可以工作但可以跳过其他所有记录的游标。我的接下来看起来像这样

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”的光标不存在。

2 个答案:

答案 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语句,但与此对话更密切相关,可以完全避免错误。