MSSQL 커서(CURSOR) 사용법 및 예제

MSSQL 커서(CURSOR) 사용법 및 예제

MS SQL에서 커서(CURSOR)는 WHILE 루프 안에서 한 행씩 처리하는 방식입니다. SELECT 문을 실행했을 때 돌려받는 결과 집합은 전체 집합이므로 한 행씩 처리가 필요할 때가 있는데 그럴 때 커서를 사용하여 처리할 수 있습니다. 커서는 사용자 정의 함수, 저장 프로시저, 트리거를 만들 때 많이 사용합니다.

그럼 간단한 예제를 통해서 커서(CURSOR) 사용법에 대해서 알아보죠.

포스트 기준

– Microsoft SQL Server 2019

– SSMS 18.11


▶ 마이크로소프트 문서

마이크로소프트 문서 - MSSQL 커서 설명

사용 예제

▶ 예제

-- 변수 선언
DECLARE @P_ID	NVARCHAR(50),   -- 학번
        @NAME	NVARCHAR(50),   -- 성명
        @S_CNT	SMALLINT,       -- 수강과목수
        @S_AVG	SMALLINT        -- 평균점수
     
-- 테이블 변수 선언
DECLARE @TEMP TABLE (
   P_ID        NVARCHAR(50),
   NAME        NVARCHAR(50),
   S_CNT       SMALLINT,
   S_AVG       SMALLINT
)
     
/* CUR_1 이름으로 커서 선언 */
DECLARE CUR_1 CURSOR FOR 
   SELECT P_ID, NAME 
     FROM BS_DEMO_8_1
    ORDER BY P_ID
     
/* 커서 오픈 */
OPEN CUR_1
FETCH NEXT FROM CUR_1 INTO @P_ID, @NAME   -- 첫번째 행에 @P_ID, @NAME 변수 값 할당
     
/* 행을 하나씩 순차적으로 처리한다. */
WHILE @@FETCH_STATUS = 0
BEGIN
        
   -- 수강과목수, 평균점수를 구한다.
   SELECT @S_CNT = COUNT(*),    -- 수강과목수
          @S_AVG = AVG(SCORE)   -- 평균점수
     FROM BS_DEMO_8_3
    WHERE P_ID = @P_ID
        
   -- 데이터가 없는 경우 디폴트 처리
   IF @@ROWCOUNT = 0
   BEGIN
      SET @S_CNT = 0
      SET @S_AVG = 0
   END
        
   -- 테이블 변수에 값을 저장한다.
   INSERT INTO @TEMP (P_ID, NAME, S_CNT, S_AVG)
   VALUES (@P_ID, @NAME, @S_CNT, @S_AVG)
        
   /* 다음 행에 @P_ID, @NAME 변수 값 할당 */
   FETCH NEXT FROM CUR_1 INTO @P_ID, @NAME
     
END
     
/* 커서를 닫고 초기화 */
CLOSE CUR_1
DEALLOCATE CUR_1
     
    
-- 테이블 변수를 SELECT
SELECT * FROM @TEMP
커서(CURSOR) 사용 예제_1
커서(CURSOR) 사용 예제_2

함께 보면 좋은 게시글

위로 스크롤