Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Point de terminaison d’analytique SQL dans Microsoft Fabric
Entrepôt dans Microsoft Fabric
Base de données SQL dans Microsoft Fabric
Définit une condition pour l’exécution répétée d’une instruction SQL ou d’un bloc d’instructions. L'exécution des instructions se répète aussi longtemps que la condition spécifiée demeure vraie. L’exécution d’instructions dans la WHILE boucle peut être contrôlée à partir de l’intérieur de la boucle avec les mots clés et BREAK les CONTINUE mots clés.
Conventions de la syntaxe Transact-SQL
Syntax
Syntaxe pour SQL Server, Azure SQL Database, Azure SQL Managed Instance et Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Syntaxe pour Azure Synapse Analytics and Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Expression qui renvoie TRUE ou FALSE. Si l’expression booléenne contient une SELECT instruction, l’instruction SELECT doit être placée entre parenthèses.
{ sql_statement | statement_block }
Toute instruction Transact-SQL ou regroupement d’instructions tel que défini avec un bloc d’instructions. Pour définir un bloc d’instructions, utilisez les mots clés BEGIN de contrôle de flux et END.
BREAK
Provoque une sortie de la boucle la plus WHILE interne. Toutes les instructions qui apparaissent après le END mot clé, marquant la fin de la boucle, sont exécutées.
CONTINUE
Redémarre une WHILE boucle. Toutes les instructions après le CONTINUE mot clé sont ignorées.
CONTINUE est fréquemment ouvert par un IF test, mais pas toujours. Pour plus d’informations, consultez Contrôle de flux.
Remarks
Si deux boucles ou plus WHILE sont imbriquées, l’intérieur BREAK se ferme à la boucle la plus externe suivante. Avant que la boucle précédente ne prenne le relais, toutes les instructions situées après la fin de la boucle intérieure sont d'abord exécutées.
Examples
Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.
A. Utiliser BREAK et CONTINUER avec if imbriqué... ELSE et WHILE
Dans l’exemple suivant, si le prix de liste moyen d’un produit est inférieur à 300 $, la WHILE boucle double les prix, puis sélectionne le prix maximal. Si le prix maximal est inférieur ou égal à 500 $, la WHILE boucle redémarre et double à nouveau les prix. Cette boucle continue de doubler les prix jusqu’à ce que le prix maximal soit supérieur à 500 $, puis quitte la WHILE boucle et imprime un message.
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. Utiliser WHILE dans un curseur
L'exemple suivant utilise @@FETCH_STATUS pour contrôler les activités d'un curseur dans une boucle WHILE.
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
Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)
C. Boucle WHILE
Dans l’exemple suivant, si le prix de liste moyen d’un produit est inférieur à 300 $, la WHILE boucle double les prix, puis sélectionne le prix maximal. Si le prix maximal est inférieur ou égal à 500 $, la WHILE boucle redémarre et double à nouveau les prix. Cette boucle continue de doubler les prix jusqu’à ce que le prix maximal soit supérieur à 500 $, puis quitte la WHILE boucle.
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