WHILE (Transact-SQL)
Gilt für: SQL Server (alle unterstützten Versionen)
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Legt eine Bedingung für die wiederholte Ausführung einer SQL-Anweisung oder eines Anweisungsblockes fest. Die Anweisungen werden wiederholt ausgeführt, solange die angegebene Bedingung true ist. Sie können die Ausführung der Anweisungen in der WHILE-Schleife mithilfe der Schlüsselwörter BREAK und CONTINUE auch innerhalb der Schleife steuern.
Transact-SQL-Syntaxkonventionen
Syntax
-- Syntax for SQL Server and Azure SQL Database
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
-- Syntax for Azure Azure Synapse Analytics and Parallel Data Warehouse
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK }
Hinweis
Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.
Argumente
Boolean_expression
Ein Ausdruck, der TRUE oder FALSE zurückgibt. Wenn der boolesche Ausdruck eine SELECT-Anweisung enthält, muss die SELECT-Anweisung in Klammern eingeschlossen werden.
{sql_statement | statement_block}
Ist eine beliebige Transact-SQL-Anweisung oder -Anweisungsgruppe, die mit einem Anweisungsblock definiert wurde. Um einen Anweisungsblock zu definieren, verwenden Sie die Schlüsselwörter zur Ablaufsteuerung BEGIN und END.
BREAK
Bewirkt das Beenden der innersten WHILE-Schleife. Alle Anweisungen nach dem END-Schlüsselwort, das das Ende der Schleife markiert, werden ausgeführt.
CONTINUE
Bewirkt, dass die WHILE-Schleife neu gestartet wird und alle Anweisungen nach dem CONTINUE-Schlüsselwort ignoriert werden.
Hinweise
Wenn zwei oder mehr WHILE-Schleifen geschachtelt sind, wird mit der inneren BREAK-Anweisung zur nächsten äußersten Schleife gesprungen. Alle Anweisungen nach dem Ende der inneren Schleife werden zuerst ausgeführt, und dann wird die nächste äußerste Schleife neu gestartet.
Beispiele
A. Verwenden von BREAK und CONTINUE mit geschachtelten IF...ELSE- und WHILE-Anweisungen
Im folgenden Beispiel verdoppelt die $300
-Schleife die Preise und wählt dann den Höchstpreis aus, wenn der durchschnittliche Listenpreis eines Produkts unter WHILE
liegt. Ist der Höchstpreis niedriger als oder gleich $500
, wird die WHILE
-Schleife erneut gestartet und der Preis erneut verdoppelt. Diese Schleife verdoppelt die Preise so lange, bis der Höchstpreis mehr als $500
beträgt; dann wird die WHILE
-Schleife beendet und eine Meldung ausgegeben.
USE AdventureWorks2012;
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. Verwenden von WHILE in einem Cursor
Im folgenden Beispiel wird @@FETCH_STATUS
zur Steuerung der Cursoraktivitäten in einer WHILE
-Schleife verwendet.
DECLARE @EmployeeID as NVARCHAR(256)
DECLARE @Title as NVARCHAR(50)
DECLARE Employee_Cursor CURSOR FOR
SELECT LoginID, JobTitle
FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor INTO @EmployeeID, @Title;
WHILE @@FETCH_STATUS = 0
BEGIN
Print ' ' + @EmployeeID + ' '+ @Title
FETCH NEXT FROM Employee_Cursor INTO @EmployeeID, @Title;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
C: Einfache WHILE-Schleife
Im folgenden Beispiel verdoppelt die $300
-Schleife die Preise und wählt dann den Höchstpreis aus, wenn der durchschnittliche Listenpreis eines Produkts unter WHILE
liegt. Ist der Höchstpreis niedriger als oder gleich $500
, wird die WHILE
-Schleife erneut gestartet und der Preis erneut verdoppelt. Diese Schleife verdoppelt die Preise so lange, bis der Höchstpreis mehr als $500
beträgt; dann wird die WHILE
-Schleife beendet.
-- Uses AdventureWorks
WHILE ( SELECT AVG(ListPrice) FROM dbo.DimProduct) < $300
BEGIN
UPDATE dbo.DimProduct
SET ListPrice = ListPrice * 2;
SELECT MAX ( ListPrice) FROM dbo.DimProduct
IF ( SELECT MAX (ListPrice) FROM dbo.DimProduct) > $500
BREAK;
END
Siehe auch
ALTER TRIGGER (Transact-SQL)
Ablaufsteuerungssprache (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
Cursor (Transact-SQL)
SELECT (Transact-SQL)