Utilisation de WHILE...BREAK ou de CONTINUE
L'instruction WHILE répète une instruction ou un bloc d'instructions tant qu'une condition définie est remplie.
Deux instructions Transact-SQL sont utilisées communément avec WHILE: BREAK ou CONTINUE. L'instruction BREAK permet de quitter une boucle WHILE intérieure tandis que l'instruction CONTINUE relance une boucle WHILE. Un programme peut exécuter une instruction BREAK si, par exemple, il n'y a plus de lignes à traiter. Une instruction CONTINUE peut être utilisée si l'exécution du programme doit continuer.
Notes
Si une instruction SELECT est utilisée comme condition d'une instruction WHILE, l'instruction SELECT doit figurer entre parenthèses.
Exemples
A. Utilisation de WHILE dans un curseur
L'exemple suivant utilise une instruction WHILE pour contrôler le nombre d'extractions.
USE AdventureWorks2008R2;
GO
DECLARE abc CURSOR FOR
SELECT * FROM Purchasing.ShipMethod;
OPEN abc;
FETCH NEXT FROM abc
WHILE (@@FETCH_STATUS = 0)
FETCH NEXT FROM abc;
CLOSE abc;
DEALLOCATE abc;
GO
Voici d'autres exemples de vérifications de condition avec WHILE :
WHILE (@ACounterVariable < 100)
Ou
WHILE EXISTS(SELECT LastName FROM Person.Person WHERE FirstName = N'Anne')
B. Utilisation de BREAK et CONTINUE avec des IF…ELSE et des WHILE imbriqués
Dans l'exemple suivant, si le prix moyen d'un produit est inférieur à $300, la boucle WHILE double les prix puis sélectionne le prix maximum. Si le prix maximum est inférieur ou égal à $500, la boucle WHILE redémarre et double de nouveau les prix. Cette boucle continue à doubler les prix jusqu'à ce que le prix maximum soit supérieur à $500, puis le programme sort de la boucle WHILE et affiche un message.
USE AdventureWorks2008R2;
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';