23

C# 言語では、continueステートメントをループ内で使用して次の反復に移動します。しかし、TSQL で Cursor を使用する場合、どうすれば同じことを実行できますか。私が持っているとしましょう、

DECLARE db_cursor CURSOR FOR SELECT age, name, color FROM table; 
DECLARE @myName VARCHAR(256);
DECLARE @myAge INT;
DECLARE @myFavoriteColor VARCHAR(40);
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
WHILE @@FETCH_STATUS = 0  
BEGIN  
       --Do stuff 
       IF @myAge=1
       BEGIN
          -- Use continue here
       END    
       --Do stuff 


       FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
4

3 に答える 3

42

CONTINUEWHILEループの先頭に戻りますが、C# の場合とまったく同じではありません。T-SQL のカーソル ループ イディオムは 2 つの別個のステートメントに分割されており、theWHILEはそれらの 2 番目のステートメントです。私たちの古くからの友人かもしれませんGOTO:

DECLARE db_cursor CURSOR FOR SELECT age, name, color FROM table; 
DECLARE @myName VARCHAR(256);
DECLARE @myAge INT;
DECLARE @myFavoriteColor VARCHAR(40);
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
WHILE @@FETCH_STATUS = 0  
BEGIN  
       --Do stuff 
       IF @myAge=1
       BEGIN
          Goto Cont
       END    
       --Do stuff 

Cont:
       FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
于 2013-07-25T06:20:48.600 に答える
2

これを試してみてください -

DECLARE 
       @myName VARCHAR(256)
     , @myAge INT
     , @myFavoriteColor VARCHAR(40)

DECLARE cursor_name CURSOR FAST_FORWARD READ_ONLY FOR
     SELECT age, name, color 
     FROM [table]

OPEN db_cursor

FETCH NEXT FROM db_cursor INTO 
       @myName
     , @myAge
     , @myFavoriteColor

WHILE @@FETCH_STATUS = 0 BEGIN

       IF @myAge = 1 BEGIN

            FETCH NEXT FROM db_cursor INTO 
                   @myName
                 , @myAge
                 , @myFavoriteColor

       END    

       FETCH NEXT FROM db_cursor INTO 
            @myName
          , @myAge
          , @myFavoriteColor

END

CLOSE db_cursor
DEALLOCATE db_cursor
于 2013-07-25T06:05:42.347 に答える