WHILE(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
SQL 문 또는 문 블록의 반복 실행에 대한 조건을 설정합니다. 문은 지정된 조건이 true인 한 반복적으로 실행됩니다. 루프의 WHILE
문 실행은 루프 내부에서 키워드와 CONTINUE
함께 BREAK
제어할 수 있습니다.
구문
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 }
인수
boolean_expression
반환 TRUE
하거나 FALSE
. 부울 식에 문이 포함된 SELECT
경우 문은 SELECT
괄호로 묶어야 합니다.
{ sql_statement | statement_block }
문 블록으로 정의된 Transact-SQL 문 또는 문 그룹화 문 블록을 정의하려면 흐름 제어 키워드 및 BEGIN
END
.
BREAK
가장 WHILE
안쪽 루프에서 종료합니다. 루프의 끝을 표시하는 키워드 다음에 END
나타나는 모든 문이 실행됩니다.
CONTINUE
루프를 다시 시작 WHILE
합니다. 키워드 뒤의 CONTINUE
모든 문은 무시됩니다. CONTINUE
는 테스트에 의해 자주 열리지만 항상 열리는 것은 IF
아닙니다. 자세한 내용은 흐름 제어를 참조 하세요.
설명
둘 이상의 WHILE
루프가 중첩되면 내부 BREAK
는 다음 가장 바깥쪽 루프로 종료됩니다. 먼저 내부 루프의 끝 이후에 있는 모든 문이 실행된 다음 바깥쪽 루프가 다시 시작됩니다.
예제
이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022
또는 AdventureWorksDW2022
샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.
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