了解SQL Cursor语法

时间:2015-02-24 00:02:37

标签: sql-server sql-server-2008 cursor

我在以下链接中查看CURSOR的示例:

http://blog.sqlauthority.com/2008/03/05/sql-server-simple-example-of-cursor-sample-cursor-part-2/

USE AdventureWorks
GO

DECLARE @ProductID INT
DECLARE @getProductID CURSOR

SET @getProductID = CURSOR FOR
    SELECT ProductID
    FROM Production.Product

OPEN @getProductID
FETCH NEXT FROM @getProductID INTO @ProductID

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @ProductID
    FETCH NEXT FROM @getProductID INTO @ProductID
END

CLOSE @getProductID
DEALLOCATE @getProductID

GO

这是一个非常简单的例子,但是我无法理解以下事项:

  • 为什么定义中有两次FETCH
  • 我们看到它在打开光标时发生,然后在while循环内部发生同样精确的FETCH
  • 我们能做些什么来使代码更清洁,更少冗余?

1 个答案:

答案 0 :(得分:2)

第一次获取是在开始循环之前填充变量。

第二次获取是为循环的下一次迭代填充这些变量。如果你的变量用完了,那么循环的@@ FETCH_STATUS = 0部分会让你失望。

不幸的是,我认为你可以将其用于游标。