MSSQL 커서(CURSOR) 사용법 및 예제
MS SQL에서 커서(CURSOR)는 WHILE 루프 안에서 한 행씩 처리하는 방식입니다. SELECT 문을 실행했을 때 돌려받는 결과 집합은 전체 집합이므로 한 행씩 처리가 필요할 때가 있는데 그럴 때 커서를 사용하여 처리할 수 있습니다. 커서는 사용자 정의 함수, 저장 프로시저, 트리거를 만들 때 많이 사용합니다.
그럼 간단한 예제를 통해서 커서(CURSOR) 사용법에 대해서 알아보죠.
포스트 기준
– Microsoft SQL Server 2019
– SSMS 18.11
▶ 마이크로소프트 문서

사용 예제
▶ 예제
-- 변수 선언
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

함께 보면 좋은 게시글
- MSSQL 변수 – 선언(DECLARE), 대입(SET), 반환(SELECT)
- MSSQL 테이블 변수 생성 및 사용 방법
- MSSQL 저장 프로시저 사용법(실행) 및 예제 (TRY…CATCH 등)
- MSSQL WHILE(반복문), CONTINUE, BREAK 사용법 – 흐름 제어(3)
- MSSQL 동적 쿼리 사용법, 저장 프로시저 및 함수 활용
이 글이 도움이 되셨다면 공유 부탁 드립니다.


![[SSMS] 로컬 서버(PC)에 설치한 MSSQL 서버 연결하는 방법](https://bluesharehub.com/wp-content/uploads/2022/02/img_41.png)
