적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (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 문 또는 문 그룹화 문 블록을 정의하려면 흐름 제어 키워드 및 BEGIN
END
.
BREAK
가장 WHILE
안쪽 루프에서 종료합니다. 루프의 끝을 표시하는 키워드 다음에 END
나타나는 모든 문이 실행됩니다.
CONTINUE
루프를 다시 시작 WHILE
합니다. 키워드 뒤의 CONTINUE
모든 문은 무시됩니다.
CONTINUE
는 테스트에 의해 자주 열리지만 항상 열리는 것은 IF
아닙니다. 자세한 내용은 흐름 제어를 참조하세요.
Remarks
둘 이상의 WHILE
루프가 중첩되면 내부 BREAK
는 다음 가장 바깥쪽 루프로 종료됩니다. 먼저 내부 루프의 끝 이후에 있는 모든 문이 실행된 다음 바깥쪽 루프가 다시 시작됩니다.
Examples
이 문서의 코드 샘플은 AdventureWorks2022
또는 AdventureWorksDW2022
샘플 데이터베이스를 사용합니다. 이 데이터베이스는 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 loop
다음 예제에서 제품의 평균 정가가 $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