![](/img/trans.png)
[英]SQL server management studio 2014 setting only returns whole numbers
[英]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;
您缺少OPEN
和IF @@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.