SQL Server Transact-SQL을 사용하여 결과 집합을 반복합니다.
이 문서에서는 SQL Server Transact-SQL을 사용하여 결과 집합을 반복하는 데 사용할 수 있는 다양한 메서드에 대해 설명합니다.
원래 제품 버전: SQL Server
원래 KB 번호: 111401
요약
이 문서에서는 저장 프로시저, 트리거 또는 Transact-SQL 일괄 처리에서 커서와 유사한 FETCH
-NEXT
논리를 시뮬레이션하는 데 사용할 수 있는 다양한 메서드에 대해 설명합니다.
Transact-SQL 문을 사용하여 결과 집합 반복
Transact-SQL 문을 사용하여 결과 집합을 반복하는 데 사용할 수 있는 세 가지 메서드가 있습니다.
한 가지 방법은 임시 테이블을 사용하는 것입니다. 이 메서드를 사용하면 초기 SELECT
문의 스냅샷 만들고 커서를 작성하기 위한 기준으로 사용합니다. 예를 들면
/********** example 1 **********/
DECLARE @au_id char( 11 )
SET rowcount 0
SELECT * INTO #mytemp FROM authors
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
WHILE @@rowcount <> 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE au_id = @au_id
DELETE #mytemp WHERE au_id = @au_id
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
END
SET rowcount 0
두 번째 방법은 함수를 min
사용하여 테이블을 한 번에 한 행씩 걷는 것입니다. 이 메서드는 새 행에 쿼리에서 처리 중인 현재 행보다 큰 고유 식별자가 있는 경우 저장 프로시저가 실행을 시작한 후 추가된 새 행을 catch합니다. 예를 들면
/********** example 2 **********/
DECLARE @au_id char( 11 )
SELECT @au_id = min( au_id ) FROM authors
WHILE @au_id IS NOT NULL
BEGIN
SELECT * FROM authors WHERE au_id = @au_id
SELECT @au_id = min( au_id ) FROM authors WHERE au_id > @au_id
END
참고
예제 1과 2는 원본 테이블의 각 행에 대해 고유 식별자가 있다고 가정합니다. 경우에 따라 고유 식별자가 없을 수 있습니다. 이 경우 새로 만든 키 열을 사용하도록 임시 테이블 메서드를 수정할 수 있습니다. 예를 들면
/********** example 3 **********/
SET rowcount 0
SELECT NULL mykey, * INTO #mytemp FROM authors
SET rowcount 1
UPDATE #mytemp SET mykey = 1
WHILE @@rowcount > 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE mykey = 1
DELETE #mytemp WHERE mykey = 1
SET rowcount 1
UPDATE #mytemp SET mykey = 1
END
SET rowcount 0
참조
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기