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.
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