Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia administrada de Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de SQL Analytics en Microsoft Fabric
Almacén en Microsoft Fabric
Base de datos SQL en Microsoft Fabric
Establece una condición para la ejecución repetida de una instrucción SQL o bloque de instrucciones. Las instrucciones se ejecutan repetidamente siempre que la condición especificada sea verdadera. La ejecución de instrucciones en el WHILE bucle se puede controlar desde dentro del bucle con las palabras BREAK clave y CONTINUE .
Convenciones de sintaxis de Transact-SQL
Syntax
Sintaxis para SQL Server, Azure SQL Database, Azure SQL Instancia administrada y Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Sintaxis de Azure Synapse Analytics and Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Expresión que devuelve TRUE o FALSE. Si la expresión booleana contiene una SELECT instrucción , la SELECT instrucción debe incluirse entre paréntesis.
{ sql_statement | statement_block}
Cualquier instrucción transact-SQL o agrupación de instrucciones tal como se define con un bloque de instrucciones. Para definir un bloque de instrucciones, use las palabras clave BEGIN control-of-flow y END.
BREAK
Provoca una salida del bucle más WHILE interno. Las instrucciones que aparecen después de la END palabra clave , que marcan el final del bucle, se ejecutan.
CONTINUE
Reinicia un WHILE bucle. Se omiten todas las instrucciones después de la CONTINUE palabra clave .
CONTINUE es frecuente, pero no siempre, abierto por una IF prueba. Para obtener más información, consulte Control de flujo.
Remarks
Si se anidan dos o más WHILE bucles, el interior BREAK sale al siguiente bucle más externo. Todas las instrucciones que se encuentran después del final del bucle interno deben ejecutarse primero y después se reinicia el siguiente bucle más externo.
Examples
Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.
A. Use BREAK y CONTINUE con IF anidado... ELSE y WHILE
En el ejemplo siguiente, si el precio medio de la lista de un producto es inferior a 300 USD, el WHILE bucle duplica los precios y, a continuación, selecciona el precio máximo. Si el precio máximo es menor o igual que $500, el WHILE bucle se reinicia y vuelve a duplicar los precios. Este bucle continúa duplicando los precios hasta que el precio máximo es mayor que $500 y, a continuación, sale del WHILE bucle e imprime un mensaje.
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. Usar WHILE en un cursor
En el ejemplo siguiente se usa @@FETCH_STATUS para controlar las actividades del cursor en un bucle 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
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
C. Bucle WHILE
En el ejemplo siguiente, si el precio medio de la lista de un producto es inferior a 300 USD, el WHILE bucle duplica los precios y, a continuación, selecciona el precio máximo. Si el precio máximo es menor o igual que $500, el WHILE bucle se reinicia y vuelve a duplicar los precios. Este bucle continúa duplicando los precios hasta que el precio máximo sea mayor que $500 y, a continuación, sale del WHILE bucle.
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