Usando WHILE... BREAK ou CONTINUE

A instrução WHILE repete uma instrução ou bloco de instruções desde que a condição especificada permaneça verdadeira.

Normalmente, duas instruções Transact-SQL são usadas WHILE: BREAK ou CONTINUE. A instrução BREAK sai do loop interno WHILE e a instrução CONTINUE reinicializa um loop WHILE. Um programa poderá executar uma instrução BREAK se, por exemplo, não houver outras linhas a serem processadas. Uma restrição CONTINUE pode ser executada se, por exemplo, for necessário prosseguir com a execução do código.

ObservaçãoObservação

Se uma instrução SELECT for usada como a condição para a instrução WHILE, a instrução SELECT deverá ficar entre parênteses.

Exemplos

A. Usando WHILE em um cursor

O exemplo a seguir usa uma instrução WHILE para controlar o número de buscas realizadas.

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

Outros testes da condição WHILE podem ser:

WHILE (@ACounterVariable < 100)

Ou

WHILE EXISTS(SELECT LastName FROM Person.Person WHERE FirstName = N'Anne')

B. Usando BREAK e CONTINUE com IF...ELSE e WHILE aninhados

No exemplo a seguir, se o preço de lista médio de um produto for menor que $300, o loop WHILE dobrará os preços e selecionará o preço máximo. Se o preço máximo for menor ou igual a $500, o loop WHILE será reiniciado e dobrará novamente os preços. Esse loop continuará dobrando os preços até que o preço máximo seja maior que $500 e, em seguida, sairá do loop WHILE e imprimirá uma mensagem.

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';