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
****====== 출처 : 백룡화검 님 블로그
'개발 관련' 카테고리의 다른 글
MSSQL & ASP 커서 작업 오류 (0) | 2016.06.27 |
---|---|
mssql tempdb dbfile 삭제 (0) | 2016.03.29 |
MSSQL 현재 명령에서 서버 오류가 발생했습니다. 결과가 있을 경우 이를 무시해야 합니다. (0) | 2015.12.14 |
http referer 에 대한 정리... 궁금증 폭발 ㅋㅋㅋㅋ (0) | 2015.09.23 |
R Studio 를 통한 그래프 (1) | 2015.07.09 |
댓글