Sql server 理解sqlcusros语法

Sql server 理解sqlcusros语法,sql-server,sql-server-2008,cursor,Sql Server,Sql Server 2008,Cursor,我正在查看以下链接上的光标示例: 这是一个非常简单的例子,但我无法理解以下内容: 为什么定义中有两次FETCH 当它打开光标时,我们看到它发生了,然后在while循环中,同样的FETCH发生了 我们可以做些什么来让代码更干净、更少冗余 第一次提取是在开始循环之前填充变量 第二个获取是为循环的下一次迭代填充这些变量。如果变量的内容已用完,循环的@FETCH\u STATUS=0部分将使您退出 不幸的是,这一点很清楚,因为我认为您可以将其用于游标。您希望仅游标执行此操作还是其他任何方法。尽量避免

我正在查看以下链接上的
光标
示例:

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

  • 为什么定义中有两次
    FETCH
  • 当它打开光标时,我们看到它发生了,然后在while循环中,同样的
    FETCH
    发生了
  • 我们可以做些什么来让代码更干净、更少冗余

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

第二个获取是为循环的下一次迭代填充这些变量。如果变量的内容已用完,循环的@FETCH\u STATUS=0部分将使您退出


不幸的是,这一点很清楚,因为我认为您可以将其用于游标。

您希望仅游标执行此操作还是其他任何方法。尽量避免光标移动。
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