WHILE (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
Legt eine Bedingung für die wiederholte Ausführung einer SQL-Anweisung oder eines Anweisungsblocks fest. Die Anweisungen werden wiederholt ausgeführt, solange die angegebene Bedingung true ist. Die Ausführung von Anweisungen in der WHILE
Schleife kann innerhalb der Schleife mit den BREAK
und CONTINUE
Schlüsselwörtern gesteuert werden.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax für SQL Server, Azure SQL-Datenbank, Azure SQL verwaltete Instanz und Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Syntax für Azure Synapse Analytics and Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Argumente
boolean_expression
Ein Ausdruck , der zurückgibt TRUE
oder FALSE
. Wenn der boolesche Ausdruck eine SELECT
Anweisung enthält, muss die SELECT
Anweisung in Klammern eingeschlossen werden.
{ sql_statement | statement_block }
Jede Transact-SQL-Anweisung oder -Anweisung, die mit einem Anweisungsblock definiert ist. Verwenden Sie zum Definieren eines Anweisungsblocks die Schlüsselwörter für die Steuerung des Flusses BEGIN
und END
.
BREAK
Verursacht einen Exit von der innersten WHILE
Schleife. Alle Anweisungen, die nach dem END
Schlüsselwort angezeigt werden und das Ende der Schleife markieren, werden ausgeführt.
CONTINUE
Startet eine WHILE
Schleife neu. Alle Anweisungen nach dem CONTINUE
Schlüsselwort werden ignoriert. CONTINUE
wird häufig, aber nicht immer, durch einen IF
Test geöffnet. Weitere Informationen finden Sie unter "Control-of-Flow".
Hinweise
Wenn zwei oder mehr WHILE
Schleifen geschachtelt sind, wird die innere BREAK
Schleife zur nächsten äußersten Schleife beendet. Alle Anweisungen nach dem Ende der inneren Schleife werden zuerst ausgeführt, und dann wird die nächste äußerste Schleife neu gestartet.
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Verwenden Sie BREAK und CONTINUE mit geschachtelten WENN... ELSE und WHILE
Wenn im folgenden Beispiel der durchschnittliche Listenpreis eines Produkts kleiner als 300 $ ist, verdoppelt die WHILE
Schleife die Preise und wählt dann den maximalen Preis aus. Wenn der Höchstpreis kleiner oder gleich 500 $ ist, wird die WHILE
Schleife neu gestartet und verdoppelt die Preise erneut. Diese Schleife verdoppelt die Preise, bis der Höchstpreis größer als 500 $ ist, und beendet dann die WHILE
Schleife und druckt eine Nachricht.
USE AdventureWorks2022;
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 AdventureWorks2022.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: WHILE-Schleife
Wenn im folgenden Beispiel der durchschnittliche Listenpreis eines Produkts kleiner als 300 $ ist, verdoppelt die WHILE
Schleife die Preise und wählt dann den maximalen Preis aus. Wenn der Höchstpreis kleiner oder gleich 500 $ ist, wird die WHILE
Schleife neu gestartet und verdoppelt die Preise erneut. Diese Schleife verdoppelt die Preise, bis der Höchstpreis größer als 500 $ ist, und beendet dann die WHILE
Schleife.
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