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

참조

ROW_NUMBER(Transact-SQL)