Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Hiermee stelt u een voorwaarde in voor de herhaalde uitvoering van een SQL-instructie of -instructieblok. De instructies worden herhaaldelijk uitgevoerd zolang de opgegeven voorwaarde waar is. De uitvoering van instructies in de WHILE lus kan worden beheerd vanuit de lus met de BREAK en CONTINUE trefwoorden.
Transact-SQL syntaxis-conventies
Syntax
Syntaxis voor SQL Server, Azure SQL Database, Azure SQL Managed Instance en Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Syntaxis voor Azure Synapse Analytics en Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Een expressie die retourneert TRUE of FALSE. Als de Boole-expressie een SELECT instructie bevat, moet de SELECT instructie tussen haakjes staan.
{ sql_statement | statement_block }
Elke Transact-SQL instructie of instructiegroep zoals gedefinieerd met een instructieblok. Als u een instructieblok wilt definiƫren, gebruikt u de trefwoorden BEGIN voor besturingsstromen en END.
BREAK
Veroorzaakt een uitgang van de binnenste WHILE lus. Alle instructies die na het END trefwoord worden weergegeven, waarbij het einde van de lus wordt gemarkeerd, worden uitgevoerd.
CONTINUE
Start een WHILE lus opnieuw op. Eventuele instructies na het CONTINUE trefwoord worden genegeerd.
CONTINUE wordt vaak, maar niet altijd, geopend door een IF test. Zie Control-of-Flow voor meer informatie.
Remarks
Als twee of meer WHILE lussen zijn genest, gaat de binnenste BREAK lus naar de volgende buitenste lus. Alle instructies na het einde van de binnenste lus worden eerst uitgevoerd en vervolgens wordt de volgende buitenste lus opnieuw opgestart.
Examples
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
A. GEBRUIK BREAK en CONTINUE met geneste ALS... ELSE en WHILE
Als in het volgende voorbeeld de gemiddelde catalogusprijs van een product lager is dan $ 300, verdubbelt de WHILE lus de prijzen en selecteert u vervolgens de maximumprijs. Als de maximumprijs lager is dan of gelijk is aan $ 500, start de WHILE lus opnieuw op en verdubbelt de prijzen opnieuw. Deze lus blijft de prijzen verdubbelen totdat de maximumprijs groter is dan $ 500 en sluit vervolgens de WHILE lus af en drukt een bericht af.
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. WHILE gebruiken in een cursor
In het volgende voorbeeld wordt gebruikgemaakt @@FETCH_STATUS van het beheren van cursoractiviteiten in een WHILE lus.
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
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
C. WHILE loop
Als in het volgende voorbeeld de gemiddelde catalogusprijs van een product lager is dan $ 300, verdubbelt de WHILE lus de prijzen en selecteert u vervolgens de maximumprijs. Als de maximumprijs lager is dan of gelijk is aan $ 500, start de WHILE lus opnieuw op en verdubbelt de prijzen opnieuw. Deze lus blijft de prijzen verdubbelen totdat de maximumprijs groter is dan $ 500 en vervolgens de WHILE lus verlaat.
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