Usar WHILE...BREAK o CONTINUE
La instrucción WHILE repite una instrucción o bloque de instrucciones mientras la condición especificada siga siendo verdadera.
Se suelen utilizar dos instrucciones de Transact-SQL con WHILE: BREAK o CONTINUE. La instrucción BREAK sale del bucle WHILE más profundo, y la instrucción CONTINUE reinicia un bucle WHILE. Un programa podría ejecutar una instrucción BREAK si, por ejemplo, no hubiera más filas que procesar. Una instrucción CONTINUE podría ejecutarse si, por ejemplo, la ejecución del código debiera continuar.
[!NOTA]
Si una instrucción SELECT se usa como condición de la instrucción WHILE, la instrucción SELECT debe ir entre paréntesis.
Ejemplos
A. Usar WHILE en un cursor
En el ejemplo siguiente se usa una instrucción WHILE para controlar el número de recuperaciones realizadas.
USE AdventureWorks;
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
Otras pruebas válidas de la condición WHILE podrían ser las siguientes:
WHILE (@ACounterVariable < 100)
O bien
WHILE EXISTS(SELECT LastName FROM Person.Contact WHERE FirstName = N'Anne')
B. Utilizar BREAK y CONTINUE con IF…ELSE y WHILE anidados
En el ejemplo siguiente, si el precio de venta promedio de un producto es inferior a $300, el bucle WHILE dobla los precios y, a continuación, selecciona el precio máximo. Si el precio máximo es menor o igual que $500, el bucle WHILE se reinicia y vuelve a doblar los precios. Este bucle continúa doblando los precios hasta que el precio máximo es mayor que $500, después de lo cual sale del bucle WHILE e imprime un mensaje.
USE AdventureWorks;
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';