如何在while循环中手动打破游标?

13
如果 while 循环触发了 break 命令,它将会跳出循环。但如果光标触发了 break 命令,它该如何完全跳出 while 循环呢?
例如:
DECLARE @CursorTest TABLE 
(
    idcol INT ,
    fld1 INT,
    fld2 INT,
    fld3 CHAR(800)
)

INSERT INTO @CursorTest (fld1, fld2, fld3)

SELECT 1, RAND() * 100 * DATEPART(ms, GETDATE()), LEFT(REPLICATE(CAST(NEWID() AS VARCHAR(36)),30),800)


DECLARE @Variable1 INT, @Variable2 INT
DECLARE CursorName CURSOR FAST_FORWARD
FOR
SELECT idcol    FROM @CursorTest    
OPEN CursorName
FETCH NEXT FROM CursorName  INTO @Variable1
WHILE @@FETCH_STATUS = 0
BEGIN   
    if (@Variable1 =10) 
    BEGIN
        BREAK
    END 
    PRINT CAST(@Variable1 AS VARCHAR(5))

FETCH NEXT FROM CursorName  INTO @Variable1
 
END
CLOSE CursorName
DEALLOCATE CursorName
1个回答

34
您可以在游标迭代的WHILE循环中给出一些条件。第一个条件应该是关于@@FETCH_STATUS,另一个条件则是您想要停止循环的条件。

您可以在游标迭代的WHILE循环中给出一些条件。第一个条件应该是关于@@FETCH_STATUS,另一个条件则是您想要停止循环的条件。

WHILE @@FETCH_STATUS = 0 OR @stopLoop = false
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
      //your code
      if condition 
      BEGIN
          @stopLoop = true
      END 
   END;
CLOSE Employee_Cursor;

使用BREAK语句

WHILE @@FETCH_STATUS = 0 
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
      //your code
      if condition 
      BEGIN
          BREAK
      END 
   END;
CLOSE Employee_Cursor;

10
难道不应该使用 WHILE @@FETCH_STATUS = 0 AND @stopLoop = false 而非 OR 吗? - Jimmy Jacques

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接