WHILE (Transact-SQL)

Ustawia stan powtarzających się wykonywanieinstrukcja SQLlub instrukcjablok. Oświadczenia są wykonywane wielokrotnie, jeśli określony warunek jest spełniony.Wykonanie instrukcji w pętla WHILE może być kontrolowane z wewnątrz pętli ze słowami kluczowymi podziału i Kontynuuj.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

WHILE Boolean_expression 
     { sql_statement | statement_block | BREAK | CONTINUE } 

Argumenty

  • Boolean_expression
    Jest wyrażenie , zwraca TRUE lub FALSE.Jeśliwyrażenie wartość logicznazawiera instrukcjaSELECT, instrukcja SELECT musi być ujęte w nawiasy.

  • {sql_statement | statement_block}
    Dowolnego Transact-SQL instrukcja lub instrukcja grupowanie określonych z instrukcja blok.Aby zdefiniować instrukcja blok, użyj słowa kluczowe sterowania przepływem rozpoczęcia i zakończenia.

  • PODZIAŁ
    Powoduje, że na wyjście z najbardziej podczas pętli.Instrukcje pojawiające się po słowa kluczowego zakończenia oznakowanie koniec pętli, są wykonywane.

  • W DALSZYM CIĄGU
    Powoduje, że pętla WHILE ponowne uruchomienie, pomijając wszelkie oświadczenia po słowie kluczowym Kontynuuj.

Uwagi

Jeśli dwa lub więcej, podczas gdy pętle są zagnieżdżone, wewnętrznego podziału zamknięte do następnej pętli peryferyjnych.Pierwsze uruchomienie oświadczeń po zakończeniu pętli i ponowne następnej pętli peryferyjnych.

Przykłady

A.Korzystanie z Zagnieżdżonymi podziału i Kontynuuj...ELSE i podczas

W poniższym przykładzie, jeżeli średnia cena rynkowa produktu wynosi mniej niż $300, WHILE Pętla podwaja się ceny, a następnie wybiera maksymalną cenę.Jeśli maksymalna cena jest mniejsza lub równa $500, WHILE pętli uruchamia się ponownie i ponownie podwaja cen.Pętlę będzie się powtarzał Podwajanie ceny, dopóki nie jest większa niż maksymalna cena $500, a następnie kończy działanie WHILE w pętli i wydrukuje komunikat o błędzie.

USE AdventureWorks2008R2;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
   UPDATE Production.Product
      SET ListPrice = ListPrice * 2
   SELECT MAX(ListPrice) FROM Production.Product
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
      BREAK
   ELSE
      CONTINUE
END
PRINT 'Too much for the market to bear';

B.Używanie w kursor

W poniższym przykładzie użyto @@FETCH_STATUS do kontroli działalności kursor w WHILE pętli.

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks2008R2.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO