ПОЛУЧИТЬ НЕ ЗАВЕРШЕНО ПУСТО - PullRequest
0 голосов
/ 31 мая 2018

У меня проблема с FETCH Я использую это:

DECLARE Something CURSOR FOR  
SELECT * FROM tblSomething

OPEN Something

WHILE @@FETCH_STATUS = 0
    BEGIN   
        --CALL ANOTHER PROCEDURE
        FETCH NEXT FROM Something
    END 
CLOSE Something
DEALLOCATE Something

Проблема в том, что в таблице 10 строк и выходит 11 строк, в 11-й строке пустые данные.Я думаю, что это идет, чтобы получить следующий ряд и понимает, что нет следующего ряда.Мне нужно что-то вроде:

IF FETCH_ROWS = MAX then STOP

или что-то в этом роде.

1 Ответ

0 голосов
/ 31 мая 2018

Попробуйте добавить FETCH NEXT FROM между OPEN и WHILE:

DECLARE Something CURSOR FOR  
SELECT * FROM tblSomething

OPEN Something
FETCH NEXT FROM Something   --  <== add this line
WHILE @@FETCH_STATUS = 0
    BEGIN   
        --CALL ANOTHER PROCEDURE
        FETCH NEXT FROM Something
    END 
CLOSE Something
DEALLOCATE Something

Вот простая демонстрация с таблицей из 10 строк и курсором, который читает каждую строку и печатает соответствующий идентификатор:

declare @tmp table (row_id int)
insert into @tmp values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) 

DECLARE @myID as int;
DECLARE @wf_Cursor as CURSOR;
SET @wf_Cursor = CURSOR FOR SELECT row_id FROM @tmp

OPEN @wf_Cursor;
    FETCH NEXT FROM @wf_Cursor INTO @myID;
    WHILE @@FETCH_STATUS = 0
        BEGIN
            print('Reading row: ' + cast(@myID as nvarchar(10)));
            FETCH NEXT FROM @wf_Cursor INTO @myID;
        END
CLOSE @wf_Cursor;
DEALLOCATE @wf_Cursor;

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...