代码之家  ›  专栏  ›  技术社区  ›  Lost

了解SQL Cusros语法

  •  1
  • Lost  · 技术社区  · 11 年前

    我在看一个例子 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循环中出现相同的精确 提取 发生
    • 我们能做些什么使代码更干净、更少冗余吗?
    1 回复  |  直到 11 年前
        1
  •  2
  •   LordBaconPants    11 年前

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

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

    不幸的是,我认为你可以为光标做得很清楚。