2017-09-13 62 views
0

我不知道为什么这个查询返回的第一行无限如何通过光标循环?

DECLARE db_cursor1 CURSOR FOR select ilduedt,accountno,ilno from TBPAYSCHED where accountno ='000520285344' and ilno!=0 order by id 
    DECLARE @ilduedt datetime; 
    DECLARE @accountno varchar(MAX); 
    DECLARE @ilno int; 
    DECLARE @tempdate datetime; 
    OPEN db_cursor1; 
    FETCH NEXT FROM db_cursor1 INTO @ilduedt,@accountno,@ilno 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    select @ilduedt,@accountno,@ilno 
    END; 
    CLOSE db_cursor1; 
    DEALLOCATE db_cursor1; 

tbpaysched

accountno | ilno | ilduedt 
------------------------------------------ 
000520285344 0  2017-07-30 00:00:00.000 
000520285344 1  2017-09-15 00:00:00.000 
000520285344 2  2017-08-30 00:00:00.000 
000520285344 3  2017-09-15 00:00:00.000 

它只返回与ilno 1无限行。我不知道,但我想我错过了一些愚蠢的东西。

+0

你的问题的最佳答案是,你应该抛弃这个光标,并用基于集合的代码重写你的过程。 –

回答

1

您在while循环错过花药FETCH NEXT,应该是:

WHILE @@FETCH_STATUS = 0 
BEGIN 
select @ilduedt,@accountno,@ilno 
FETCH NEXT FROM db_cursor1 INTO @ilduedt,@accountno,@ilno  
END 
1

您还没有获取从有FETCH_NEXT通话记录集的下一行。但是,假设记录集中有一行,上面的代码应该导致无限循环。

FETCH NEXT FROM db_cursor1 INTO @ilduedt,@accountno,@ilno 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     select @ilduedt,@accountno,@ilno 
     FETCH NEXT FROM db_cursor1 INTO @ilduedt,@accountno,@ilno 
    END;