본문 바로가기
개발 관련

MSSQL Cursor 커서

by 조이플워니 2016. 3. 9.

MSSQL 에서의 커서(Cursor)란 다수의 행을 지정하여 커서로 묶어 놓고..(또는 넣어놓고)...


한 행씩 데이터 처리를 하는 방법이다.



예제를 보자... 


/*

테스트 테이블 생성 및 데이터 입력

create table TEST(문항 int, 답변자 varchar(10), 답변내용 int)

 

insert into test values (1,'홍길동',1)

insert into test values (1,'갑돌이',2)

insert into test values (1,'홍길동',3)

insert into test values (2,'홍길동',4)

insert into test values (3,'홍길동',1)

insert into test values (3,'홍길동',2)

insert into test values (3,'홍길동',3)

 

*/

 

----------------------------------------------------------------

-- 커서를 사용

----------------------------------------------------------------

-- 결과를입력할임시테이블

create table #temp(문항 int, 답변자 varchar(10), 답변내용 VARCHAR(100))

 

 

-- 커서

DECLARE @문항 int, @답변자 varchar(10), @답변내용 int

DECLARE @CNT INT, @복합답변 VARCHAR(100)

 

DECLARE MYCUR CURSOR FOR

      

       SELECT 문항,답변자,답변내용

       FROM TEST

       ORDER BY 문항,답변자,답변내용

 

OPEN MYCUR

FETCH NEXT FROM MYCUR INTO @문항, @답변자, @답변내용

 

WHILE (@@FETCH_STATUS=0)

 

BEGIN       

       SET @CNT= ISNULL((SELECT COUNT(*)  FROM #temp WHERE 문항=@문항 AND 답변자=@답변자),0)

 

       IF @CNT=0

       BEGIN

             INSERT INTO #temp(문항,답변자,답변내용) values (@문항, @답변자, convert(varchar,@답변내용))

       END

       ELSE

       BEGIN

             UPDATE #temp

             SET 답변내용=답변내용+','+convert(varchar,@답변내용)

             WHERE 문항=@문항 AND 답변자=@답변자

       END

 

 

       FETCH NEXT FROM MYCUR INTO  @문항, @답변자, @답변내용

END

 

 

CLOSE MYCUR

DEALLOCATE MYCUR

 

 

--결과가입력된임시테이블조회

SELECT * FROM #TEMP ORDER BY 답변자,문항

 

 

 

결과

문항 답변자 답변내용

----------- ---------- -----------

1           갑돌이        2

1           홍길동        1,3

2           홍길동        4

3           홍길동        1,2,3


****====== 출처 : 백룡화검 님 블로그 

댓글