SQL 服务器:只有游标 returns 在 Management Studio 中 运行 第一次记录

SQL Server: cursor only returns records first time when running in Management Studio

我希望有人能帮助解决这个问题!我正在尝试编写一个使用游标的存储过程。当我在 Management Studio 中对此进行测试时,存储过程仅 returns 记录第一次 运行。如果我 copy/past 到另一个查询 window,它再次 returns 只记录第一次。当来自 C# 的 运行 时,存储过程按预期工作。

下面的查询说明了这个问题。提前致谢!

-------------------------------------------------------------------
-- 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; 

您在 OPENIF @@FETCH_STATUS <> 0 之间缺少一个 FETCH NEXT

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.

中的迭代快