본문 바로가기

프로그램 경험/Database

[SqlServer] 커서(CURSOR) 사용법

커서(CURSOR) 사용법 - SqlServer

가끔 커서를 써서 데이터를 처리해야 할 필요가 있습니다. 간단한 예제를 통해서 사용법을 적어 봤습니다.
유저테이블(UserTable)에서 삭제된(UseYN=’N’) 사용자들만 조회해서 삭제유저테이블에(DeleteUserTable)에 저장하는 예제 입니다.
뭐 이렇게 번거롭게 커서를 써서 할 필요 없는 쿼리지만 그저 예제를 구성하기 위함이니 탓하지 마시기를^^

--커서 데이터를 가져올 변수 선언
DECLARE @UserID        VARCHAR(10)
DECLARE @UserName    VARCHAR(50)

--커서 선언하면서 조회된 데이터를 담습니다.
DECLARE db_cursor CURSOR FOR  
SELECT 
    UserID, UserName
FROM UserTable
WHERE UseYN = 'N'

--커서를 열고 첫행에서 데이터를 꺼내서 변수에 담습니다.   
--데이터를 꺼낼때마다 @@FETCH_STATUS가 감소 합니다.
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @UserID, @UserName

--꺼낼 데이터가 없을때까지 반복하면서 
WHILE @@FETCH_STATUS = 0   
BEGIN
    --처리할 일을 하고
    INSERT DeleteUserTable (UserID, UserName)
    VALUES (@UserID, @UserName)

    --다시 데이터를 꺼냅니다.
    FETCH NEXT FROM db_cursor INTO @UserID, @UserName
END   

--커서를 삭제 합니다.
CLOSE db_cursor   
DEALLOCATE db_cursor