적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 웨어하우스
Microsoft Fabric의 SQL 데이터베이스
SQL 문 또는 문 블록의 반복 실행에 대한 조건을 설정합니다. 문은 지정된 조건이 true인 한 반복적으로 실행됩니다. 루프의 WHILE 문 실행은 루프 내부에서 키워드와 BREAK 함께 CONTINUE 제어할 수 있습니다.
Syntax
SQL Server, Azure SQL Database, Azure SQL Managed Instance 및 Microsoft Fabric에 대한 구문입니다.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Azure Synapse Analytics 및 Analytics Platform System(PDW)에 대한 구문입니다.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
반환 TRUE 하거나 FALSE. 부울 식에 문이 포함된 SELECT 경우 문은 SELECT 괄호로 묶어야 합니다.
{ sql_statement | statement_block}
문 블록으로 정의된 Transact-SQL 문 또는 문 그룹화 문 블록을 정의하려면 흐름 제어 키워드 및 BEGINEND.
BREAK
가장 WHILE 안쪽 루프에서 종료합니다. 루프의 끝을 표시하는 키워드 다음에 END 나타나는 모든 문이 실행됩니다.
CONTINUE
루프를 다시 시작 WHILE 합니다. 키워드 뒤의 CONTINUE 모든 문은 무시됩니다.
CONTINUE 는 테스트에 의해 자주 열리지만 항상 열리는 것은 IF 아닙니다. 자세한 내용은 흐름 제어를 참조하세요.
Remarks
둘 이상의 WHILE 루프가 중첩되면 내부 BREAK 는 다음 가장 바깥쪽 루프로 종료됩니다. 먼저 내부 루프의 끝 이후에 있는 모든 문이 실행된 다음 바깥쪽 루프가 다시 시작됩니다.
Examples
이 문서의 코드 샘플은 AdventureWorks2025 또는 AdventureWorksDW2025 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.
A. 중첩된 IF와 함께 BREAK 및 CONTINUE 사용... ELSE 및 WHILE
다음 예제에서 제품의 평균 정가가 $300 미만이면 루프는 WHILE 가격을 두 배로 곱한 다음 최대 가격을 선택합니다. 최대 가격이 $500보다 작거나 같으면 루프가 WHILE 다시 시작되고 가격이 다시 두 배가 됩니다. 이 루프는 최대 가격이 $500보다 클 때까지 가격을 계속 두 배로 늘리고 루프를 WHILE 종료하고 메시지를 출력합니다.
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. 커서에서 WHILE 사용
다음 예에서는 @@FETCH_STATUS를 사용하여 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
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
C. WHILE 루프
다음 예제에서 제품의 평균 정가가 $300 미만이면 루프는 WHILE 가격을 두 배로 곱한 다음 최대 가격을 선택합니다. 최대 가격이 $500보다 작거나 같으면 루프가 WHILE 다시 시작되고 가격이 다시 두 배가 됩니다. 이 루프는 최대 가격이 $500보다 클 때까지 가격을 계속 두 배로 늘리고 루프를 WHILE 종료합니다.
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