2013-07-25 47 views
12

Trong ngôn ngữ C#, chúng tôi sử dụng câu lệnh continue trong vòng lặp để chuyển sang lần lặp tiếp theo. Nhưng trong việc sử dụng con trỏ trong TSQL làm thế nào tôi có thể thực hiện như vậy. Hãy nói tôi có,Tiếp tục từ trên cùng trong SQL SERVER Con trỏ?

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; 
+0

Tất nhiên bạn nhận ra rằng nó là xấu thực hành để sử dụng con trỏ nếu có một cách thiết lập dựa trên để làm nhiệm vụ, phải không? Con trỏ là kẻ giết người thực hiện. – HLGEM

Trả lời

27

CONTINUE không quay trở lại khi bắt đầu WHILE vòng lặp, nhưng đó là không chính xác như trong C#, kể từ khi con trỏ vòng lặp thành ngữ trong T -SQL được chia thành hai báo cáo riêng biệt, và WHILE là lần thứ hai trong số họ - sạch nhất, đòi hỏi sự lặp lại ít nhất, có thể là người bạn cũ của chúng tôi 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; 
+0

Oh cái này cũng trông rất tuyệt. Cảm ơn. – user960567

3

Hãy thử điều này một -

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 
+0

Tôi nghĩ CONTINUE không chuyển sang lần lặp tiếp theo, không giống như trong C# – user960567

+0

@ user960567 - đây là [trang Technet] (http://technet.microsoft.com/en-us/library/ms174366.aspx) cho nó. –

+0

@ user960567 vui lòng xem câu trả lời được cập nhật. – Devart

6

bạn có thể sử dụng CONTINUE theo cách này

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 

      FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor; 
      CONTINUE; 
     END  
     --Do stuff 


     FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor; 
END; 
CLOSE db_cursor; 
DEALLOCATE db_cursor; 
Các vấn đề liên quan