簡體   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