Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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