커서(Cursor)란?

행 단위 작업을 추가로 제어해야 할 경우 사용되는 기능입니다.

행 단위 작업이란 예를들면 특정 테이블에서 SELECT한 Email 별로 작업을 해야 하는 경우를 말합니다.

즉 Email 별로 특정 값을 변경 시킬 때, 반복으로 노가다 할 필요 없이 한번에 처리하는 쿼리를 만들 수 있습니다. 커서를 이용해서 말이죠

커서 선언

--커서 생성
DECLARE   CursorEmail   CURSOR  
FOR SELECT Email from tblUserTable where IsDelete = 'False'

커서 열기

--커서 열기
Open CursorEmail;

불러온 데이터를 이용한 작업

-- 맨처음 결과 데이터로 이동
Fetch Next From CursorEmail Into @email 

WHILE(@@FETCH_STATUS <> -1) 
BEGIN; 
    --원하는 작업 수행 

    --다음 결과 데이터로 이동 
    Fetch Next From CursorEmail Into @email; 
END;

커서 닫기

Close CursorEmail; 
Deallocate CursorEmail;

위에 일련의 과정을 통하여 커서기능을 사용 할 수 있습니다.

하지만 많은 데이터를 처리 할 경우 SQL서버에 많은 부하를 줄 수 있으므로 잘 사용해야 합니다.

이 포스트에서는 너무 간략히 설명하고 있는데, 자세하게 알고 싶으면 아래 블로그를 방문해보길 바랍니다.

[커서 - 수까락의 프로그래밍 이야기](http://egloos.zum.com/sweeper/v/3028155)




간단한 예제


--값을 담아놓을 임시 변수 생성 
DECLARE @email VARCHAR(100)  
DECLARE @idx INT 
SET @idx = 0 

DECLARE CursorEmail CURSOR  
FOR SELECT Email from tblUserTable where IsDelete = 'False' 

Open CursorEmail; 

Fetch Next From CursorEmail Into @email 

While(@@FETCH_STATUS <> -1) 
Begin; 
    --Idx 1씩 증가 
    SET @idx = @idx + 1 

    --업데이트 수행 
    UPDATE tblUserTable 
    SET groupIdx = @idx 
    WHERE IsDelete = 'False' AND Email = @email 

    Fetch Next From CursorEmail Into @email; 
End; 

Close CursorEmail; 
Deallocate CursorEmail;