Udostępnij za pomocą


PODCZAS (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Ustawia warunek wielokrotnego wykonywania instrukcji SQL lub bloku instrukcji. Instrukcje są wykonywane wielokrotnie, o ile określony warunek jest spełniony. Wykonywanie instrukcji w WHILE pętli można kontrolować z wewnątrz pętli za pomocą BREAK słów kluczowych i CONTINUE .

Transact-SQL konwencje składni

Syntax

Składnia dla programów SQL Server, Azure SQL Database, Azure SQL Managed Instance i Microsoft Fabric.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK | CONTINUE }

Składnia dla usług Azure Synapse Analytics i Analytics Platform System (PDW).

WHILE boolean_expression
    { sql_statement | statement_block | BREAK }

Arguments

boolean_expression

Wyrażenie zwracające TRUE wartość lub FALSE. Jeśli wyrażenie logiczne zawiera instrukcję SELECT , SELECT instrukcja musi być ujęta w nawiasy.

{ sql_statement | statement_block }

Każda instrukcja Transact-SQL lub grupowanie instrukcji zgodnie z definicją za pomocą bloku instrukcji. Aby zdefiniować blok instrukcji, użyj słów kluczowych BEGIN control-of-flow i END.

BREAK

Powoduje wyjście z najbardziej wewnętrznej WHILE pętli. Wszystkie instrukcje wyświetlane po słowie END kluczowym oznaczające koniec pętli są wykonywane.

CONTINUE

Uruchamia ponownie pętlę WHILE . Wszystkie instrukcje po słowie CONTINUE kluczowym są ignorowane. CONTINUE jest często, ale nie zawsze otwierany przez IF test. Aby uzyskać więcej informacji, zobacz Control-of-Flow (Sterowanie przepływem).

Remarks

Jeśli są zagnieżdżone dwie lub więcej WHILE pętli, wewnętrzne BREAK wyjście do następnej pętli najbardziej zewnętrznej. Wszystkie instrukcje po zakończeniu pętli wewnętrznej są najpierw uruchamiane, a następnie następnej pętli najbardziej zewnętrznej ponownie.

Examples

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Użyj opcji BREAK i CONTINUE z zagnieżdżonym if... ELSE i WHILE

W poniższym przykładzie, jeśli średnia cena katalogowa produktu jest mniejsza niż 300 USD, pętla podwaja ceny, WHILE a następnie wybiera maksymalną cenę. Jeśli maksymalna cena jest mniejsza lub równa 500 USD, WHILE pętla zostanie ponownie uruchomiona i podwoi ceny. Ta pętla kontynuuje podwojenie cen, dopóki maksymalna cena nie będzie większa niż $500, a następnie kończy pętlę i drukuje WHILE komunikat.

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. Używanie funkcji WHILE w kursorze

W poniższym przykładzie użyto @@FETCH_STATUS metody do sterowania działaniami kursora WHILE w pętli.

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

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Pętla WHILE

W poniższym przykładzie, jeśli średnia cena katalogowa produktu jest mniejsza niż 300 USD, pętla podwaja ceny, WHILE a następnie wybiera maksymalną cenę. Jeśli maksymalna cena jest mniejsza lub równa 500 USD, WHILE pętla zostanie ponownie uruchomiona i podwoi ceny. Ta pętla kontynuuje podwojenie cen, dopóki maksymalna cena nie będzie większa niż $500, a następnie kończy pętlę WHILE .

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