Share via


WHILE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

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. Die Ausführung von Anweisungen in der WHILE Schleife kann innerhalb der Schleife mit den BREAK und CONTINUE Schlüsselwort (keyword) 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 }

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

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 Steuerung des Flusses Schlüsselwort (keyword) und BEGINEND.

BREAK

Verursacht einen Exit von der innersten WHILE Schleife. Alle Anweisungen, die nach dem END Schlüsselwort (keyword) angezeigt werden und das Ende der Schleife markieren, werden ausgeführt.

CONTINUE

Startet eine WHILE Schleife neu. Alle Anweisungen nach dem CONTINUE Schlüsselwort (keyword) 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-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