SQL Server: курсор только возвращает записи при запуске в Management Studio - PullRequest
0 голосов
/ 24 октября 2018

Я надеюсь, что кто-то может помочь с этим!Я пытаюсь написать хранимую процедуру, которая использует курсор.Когда я проверяю это в Management Studio, sproc возвращает записи только при первом запуске.Если я копирую / прошёл в другое окно запроса, оно снова возвращает записи только в первый раз.При запуске из C # sproc работает как положено.

Запрос ниже демонстрирует проблему.Заранее спасибо!

-------------------------------------------------------------------
-- Query to reproduce problem with using cursor - management studio
-------------------------------------------------------------------
--
Declare     crsrTest Cursor For 
Select      TABLE_NAME 
From        INFORMATION_SCHEMA.TABLES; 

Declare     @TableName  varchar(128);
Open        crsrTest;  

-- 
-- This will only return records the *first* time when running in MS. 
-- Every time after that, I get the 'No records' message. 
-- 
if @@FETCH_STATUS <> 0 
    Print 'No records';             
while   @@FETCH_STATUS = 0 begin 
    Fetch   Next 
    From    crsrTest
    Into    @TableName;  
    Print   @TableName;
end;

Close       crsrTest; 
Deallocate  crsrTest; 

1 Ответ

0 голосов
/ 24 октября 2018

Вам не хватает FETCH NEXT между OPEN и IF @@FETCH_STATUS <> 0:

DECLARE crsrTest CURSOR FOR
     SELECT TABLE_NAME 
     FROM INFORMATION_SCHEMA.TABLES; 

DECLARE @TableName VARCHAR(128);

OPEN crsrTest;  

FETCH NEXT FROM crsrTest INTO @TableName;
PRINT @TableName;

-- This will always return records
IF @@FETCH_STATUS <> 0 
   PRINT 'No records';             

WHILE @@FETCH_STATUS = 0 
BEGIN
    FETCH NEXT FROM crsrTest INTO @TableName;
    PRINT @TableName;
END;

CLOSE crsrTest; 
DEALLOCATE crsrTest;

Держитесь подальше от курсоров, если можете (кажется, вы новичок в них, поэтому яговорить).Если вы парень из ORACLE, это не так быстро, как итерации в PL / SQL.

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