WHILE(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) SQL 분석 엔드포인트
SQL 문 또는 문 블록의 반복 실행을 위한 조건을 설정합니다. 문은 지정된 조건이 true인 한 반복적으로 실행됩니다. WHILE 루프 내의 문 실행은 BREAK와 CONTINUE 키워드를 사용하여 루프 내에서 제어할 수 있습니다.
Syntax
-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
-- Syntax for Azure Azure Synapse Analytics and Parallel Data Warehouse
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK }
참고 항목
SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.
인수
Boolean_expression
TRUE 또는 FALSE를 반환하는 식입니다. 부울 식이 SELECT 문을 포함하는 경우에는 SELECT 문을 괄호로 묶어야 합니다.
{sql_statement | statement_block}
문 블록에 정의된 Transact-SQL 문이나 문 그룹입니다. 문 블록을 정의하려면 흐름 제어 키워드인 BEGIN 및 END를 사용하세요.
BREAK
현재 위치에 해당하는 WHILE 루프를 종료합니다. 루프의 끝을 표시하는 END 키워드 다음에 있는 모든 문은 그대로 실행됩니다.
CONTINUE
CONTINUE 키워드 다음의 모든 문을 무시하고 WHILE 루프가 다시 시작되도록 합니다.
설명
둘 이상의 WHILE 루프가 중첩된 경우 내부 루프에 BREAK가 있으면 현재 루프를 종료하고 한 단계 바깥쪽 루프로 이동합니다. 먼저 내부 루프의 끝 이후에 있는 모든 문이 실행된 다음 바깥쪽 루프가 다시 시작됩니다.
예제
A. 중첩된 IF...ELSE 및 WHILE에서 BREAK 및 CONTINUE 사용
다음 예에서는 제품의 평균 정가가 $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
루프를 종료합니다.
-- Uses AdventureWorks
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
관련 항목
ALTER TRIGGER(Transact-SQL)
흐름 제어 언어(Transact-SQL)
CREATE TRIGGER(Transact-SQL)
커서(Transact-SQL)
SELECT(Transact-SQL)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기