Share via


Azure Synapse Analytics에서 전용 SQL 풀에 T-SQL 루프 사용

이 문서에는 T-SQL 루프를 사용하고 커서를 바꾸는 전용 SQL 풀 솔루션 개발에 대한 팁이 포함되어 있습니다.

WHILE 루프의 목적

Azure Synapse의 전용 SQL 풀은 문 블록을 반복 실행하는 WHILE 루프를 지원합니다. 이 WHILE 루프는 지정한 조건이 true이거나 코드가 BREAK 키워드를 사용하여 루프를 명시적으로 종료할 때까지 계속됩니다.

루프는 SQL 코드에 정의된 커서를 대체하는 데 유용합니다. 다행히 SQL 코드로 작성된 거의 모든 커서는 빠른 정방향 읽기 전용 변형만 존재합니다. 따라서 WHILE 루프는 커서를 바꾸는 좋은 대안입니다.

전용 SQL 풀에서 커서 바꾸기

그러나 계속 진행하기 전에 먼저 스스로 질문해 보아야 합니다. “집합 기반 작업을 사용하도록 이 커서를 다시 작성할 수 있을까?”

대부분의 경우 다시 작성할 수 있으며 자주 가장 좋은 방법이기도 합니다. 집합 기반 작업은 흔히 행별 반복 접근 방식보다 더 빠르게 수행됩니다.

빠른 정방향 읽기 전용 커서는 루핑 구성으로 쉽게 대체할 수 있습니다. 다음은 간단한 예제입니다. 이 코드 예제는 데이터베이스의 모든 테이블에 대한 통계를 업데이트합니다. 루프의 테이블을 반복하여 각 명령이 순차적으로 실행됩니다.

첫째, 개별 문을 식별하는 데 사용되는 고유한 행 번호를 포함하는 임시 테이블을 만듭니다.

CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT  ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
,       [name]
,       'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM    sys.tables
;

둘째, 루프를 수행하는 데 필요한 변수를 초기화합니다.

DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
,       @i INT = 1
;

이제 문을 반복하여 한 번에 하나씩 실행합니다.

WHILE   @i <= @nbr_statements
BEGIN
    DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
    EXEC    sp_executesql @sql_code;
    SET     @i +=1;
END

마지막으로 첫 번째 단계에서 만든 임시 테이블을 삭제합니다.

DROP TABLE #tbl;

다음 단계

더 많은 개발 팁은 개발 개요를 참조하세요.