繁体   English   中英

SQL Server:在Management Studio中运行时,游标仅在第一次时返回记录

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

我希望有人可以提供帮助! 我正在尝试编写一个使用游标的存储过程。 当我在Management Studio中进行测试时,该存储过程仅在首次运行时返回记录。 如果我复制/粘贴到另一个查询窗口,它将仅在第一次时再次返回记录。 从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中的迭代那么快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM