WHILE (Transact-SQL)
Actualizado: 14 de abril de 2006
Establece una condición para la ejecución repetida de una instrucción o bloque de instrucciones SQL. Las instrucciones se ejecutan repetidamente siempre que la condición especificada sea verdadera. Se puede controlar la ejecución de instrucciones en el bucle WHILE con las palabras clave BREAK y CONTINUE.
Convenciones de sintaxis de Transact-SQL
Sintaxis
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
{ sql_statement | statement_block }
Argumentos
- Boolean_expression
Es una expresión que devuelve TRUE o FALSE. Si la expresión booleana contiene una instrucción SELECT, la instrucción SELECT debe ir entre paréntesis.
- {sql_statement | statement_block}
Se trata de cualquier instrucción o grupo de instrucciones Transact-SQL definidas con un bloque de instrucciones. Para definir un bloque de instrucciones, utilice las palabras clave de control de flujo BEGIN y END.
- BREAK
Produce la salida del bucle WHILE más interno. Se ejecutan las instrucciones que aparecen después de la palabra clave END, que marca el final del bucle.
- CONTINUE
Hace que se reinicie el bucle WHILE y omite las instrucciones que haya después de la palabra clave CONTINUE.
Notas
Si hay dos o más bucles WHILE anidados, la instrucción BREAK interna sale al siguiente bucle más externo. Todas las instrucciones que se encuentren después del final del bucle interno se ejecutan primero y después se reinicia el siguiente bucle más externo.
Ejemplos
A. 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';
B. Usar WHILE en un cursor
En el ejemplo siguiente se usa @@FETCH_STATUS
para controlar las actividades del cursor en un bucle WHILE
.
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
Vea también
Referencia
ALTER TRIGGER (Transact-SQL)
Lenguaje de control de flujo (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
Cursores (Transact-SQL)
SELECT (Transact-SQL)
Otros recursos
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
14 de abril de 2006 |
|