Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza 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