Megosztás a következőn keresztül:


WHILE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy SQL-utasítás vagy utasításblokk ismételt végrehajtásának feltételét állítja be. Az utasítások végrehajtása mindaddig ismétlődik, amíg a megadott feltétel teljesül. A ciklusban lévő WHILE utasítások végrehajtása a cikluson belülről vezérelhető a kulcsszavakkal és BREAK a CONTINUE kulcsszavakkal.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis az SQL Serverhez, az Azure SQL Database-hez, a felügyelt Azure SQL-példányhoz és a Microsoft Fabrichez.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK | CONTINUE }

Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK }

Arguments

boolean_expression

Olyan kifejezés , amely visszaadja TRUE vagy FALSE. Ha a logikai kifejezés utasítást SELECT tartalmaz, az SELECT utasítást zárójelben kell megadni.

{ sql_statement | statement_block }

Bármely Transact-SQL utasítás vagy utasításcsoportozás az utasításblokkdal definiált módon. Utasításblokk meghatározásához használja a folyamatvezérlési kulcsszavakat BEGIN és ENDa .

BREAK

Kilépést okoz a legbelső WHILE hurokból. A rendszer végrehajt minden olyan utasítást, amely a END kulcsszó után jelenik meg, és megjelöli a ciklus végét.

CONTINUE

Újraindul egy WHILE hurok. A kulcsszót követő CONTINUE utasítások figyelmen kívül lesznek hagyva. CONTINUE gyakran, de nem mindig nyitja meg egy IF teszt. További információ: Control-of-Flow.

Remarks

Ha két vagy több WHILE hurok van beágyazva, a belső BREAK kilép a következő legkülső hurokba. A belső hurok vége utáni összes utasítás először fut, majd a következő legkülső hurok újraindul.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. A BREAK és a CONTINUE függvény használata beágyazott HA... ELSE és WHILE

Az alábbi példában, ha egy termék átlagos listaára 300 USD-nél kisebb, a WHILE ciklus megduplázza az árakat, majd kiválasztja a maximális árat. Ha a maximális ár kisebb vagy egyenlő 500 dollárnál, a WHILE hurok újraindul, és ismét megduplázza az árakat. Ez a hurok mindaddig megduplázja az árakat, amíg a maximális ár nem haladja meg az 500 USD-t, majd kilép a WHILE hurokból, és üzenetet nyomtat.

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. A WHILE használata a kurzorban

Az alábbi példa a kurzortevékenységek szabályozására szolgál @@FETCH_STATUS egy WHILE ciklusban.

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

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

C. WHILE hurok

Az alábbi példában, ha egy termék átlagos listaára 300 USD-nél kisebb, a WHILE ciklus megduplázza az árakat, majd kiválasztja a maximális árat. Ha a maximális ár kisebb vagy egyenlő 500 dollárnál, a WHILE hurok újraindul, és ismét megduplázza az árakat. Ez a hurok mindaddig megduplázja az árakat, amíg a maximális ár nem haladja meg az 500 USD-t, majd kilép a WHILE hurokból.

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