WHILE...BREAK 또는 CONTINUE 사용

WHILE 문은 지정된 조건이 True인 동안 문 또는 문 블록을 반복합니다.

WHILE과 함께 주로 사용되는 Transact-SQL 문은 BREAK와 CONTINUE, 이렇게 두 가지입니다. BREAK 문은 가장 안쪽의 WHILE 루프를 종료하고 CONTINUE 문은 WHILE 루프를 다시 시작합니다. 예를 들어 프로그램에서 처리할 행이 더 없는 경우 BREAK 문을 실행할 수 있습니다. CONTINUE 문은 코드를 계속 실행해야 하는 등의 경우에 실행할 수 있습니다.

[!참고]

SELECT 문이 WHILE 문의 조건으로 사용되면 SELECT 문은 괄호 안에 있어야 합니다.

1. 커서에 WHILE 사용

다음 예에서는 WHILE 문을 사용하여 수행할 인출 수를 제어합니다.

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

기타 유효한 WHILE 조건 테스트는 다음과 같습니다.

WHILE (@ACounterVariable < 100)

또는

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

2. 중첩된 IF...ELSE 및 WHILE에서 BREAK 및 CONTINUE 사용

다음 예에서는 제품의 평균 정가가 $300 미만인 경우 WHILE 루프가 가격을 두 배로 한 다음 최대 가격을 선택합니다. 최대 가격이 $500 이하인 경우 WHILE 루프가 다시 시작되어 가격을 다시 두 배로 만듭니다. 이 루프는 최대 가격이 $500를 초과할 때까지 가격을 계속 두 배로 만든 다음 WHILE 루프를 종료하고 메시지를 출력합니다.

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