2015-02-06 65 views
6
 if while loop also having a break, if while loop hit break command i t comes out of the loop and if cursor hit break command , how it come entire out of the while loop 

     for example: 
     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 



    if cursor hit break command , how it come entire out of the while loop 

如果while循環也有突破,如果在循環打break命令它出來的循環,如果光標砸break命令,它是如何來整出while循環如何在while循環內手動分解遊標。在SQL Server

回答

12

你可以在光標上迭代的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; 
0

我的代碼如下:: DECLARE @變量1 INT,@變量2 INT DECLARE CURSOR CursorName中FAST_FORWARD FOR SELECT idcol

FROM CursorTest 
OPEN CursorName 
FETCH NEXT FROM CursorName 

INTO @Variable1 
WHILE @@FETCH_STATUS = 0 
BEGIN 
PRINT CAST(@Variable1 AS VARCHAR(5)) 
FETCH NEXT FROM CursorName 
INTO @Variable1 
END 
CLOSE CursorName 
DEALLOCATE CursorName 

如果光標命中中斷命令,它是如何整個出來的while循環