Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Define uma condição para a execução repetida de uma instrução SQL ou bloco de instrução. As instruções são executadas repetidamente, desde que a condição especificada seja verdadeira. A execução de instruções no WHILE loop pode ser controlada de dentro do loop com as BREAK palavras-chave e CONTINUE .
Transact-SQL convenções de sintaxe
Syntax
Sintaxe para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure e Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Sintaxe para o Azure Synapse Analytics and Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Uma expressão que retorna TRUE ou FALSE. Se a expressão booleana contiver uma SELECT instrução, a SELECT instrução deve ser colocada entre parênteses.
{ sql_statement | statement_block }
Qualquer instrução Transact-SQL ou agrupamento de instruções conforme definido com um bloco de instruções. Para definir um bloco de instruções, use as palavras-chave BEGIN control-of-flow e END.
BREAK
Causa uma saída do loop mais WHILE interno. Todas as instruções que aparecem após a palavra-chave END , marcando o fim do loop, são executadas.
CONTINUE
Reinicia um WHILE loop. Todas as instruções após a CONTINUE palavra-chave são ignoradas.
CONTINUE é frequentemente aberta, mas nem sempre, por um IF teste. Para obter mais informações, consulte Controle de fluxo.
Remarks
Se dois ou mais WHILE loops estiverem aninhados, o loop interno BREAK será retirado para o próximo loop externo. Todas as instruções após o final do loop interno são executadas primeiro e, em seguida, o próximo loop externo é reiniciado.
Examples
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.
A. Use BREAK e CONTINUE com o IF aninhado... ELSE e WHILE
No exemplo a seguir, se o preço médio de tabela de um produto for inferior a US$ 300, o WHILE loop dobrará os preços e, em seguida, selecionará o preço máximo. Se o preço máximo for menor ou igual a $500, o WHILE loop reinicia e dobra os preços novamente. Esse loop continua dobrando os preços até que o preço máximo seja maior que $500 e, em seguida, sai do WHILE loop e imprime uma mensagem.
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. Use WHILE em um cursor
O exemplo a seguir usa @@FETCH_STATUS para controlar as atividades do cursor em um WHILE loop.
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
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Loop WHILE
No exemplo a seguir, se o preço médio de tabela de um produto for inferior a US$ 300, o WHILE loop dobrará os preços e, em seguida, selecionará o preço máximo. Se o preço máximo for menor ou igual a $500, o WHILE loop reinicia e dobra os preços novamente. Esse loop continua dobrando os preços até que o preço máximo seja maior que $500 e, em seguida, sai do WHILE loop.
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