* 커서 (Cursor)
가능한한 SQL Server 커서의 사용을 피한다.
SQL Server 커서는 select문에 비해 성능상에 좋지 않다. 행단위의 처리가 필요하다면 상관질의나 유도된 테이블을 사용하도록 노력하자.
-- 결과를입력할임시테이블
create table #temp(
문항 int,
답변자 nvarchar(10),
답변내용 nvARCHAR(100)
)
-- 커서
DECLARE @문항 int, @답변자 nvarchar(10), @답변내용 int
DECLARE @CNT INT, @복합답변 nVARCHAR(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(nvarchar,@답변내용))
END
ELSE
BEGIN
UPDATE #temp
SET 답변내용=답변내용+','+convert(nvarchar,@답변내용)
WHERE 문항=@문항 AND 답변자=@답변자
END
FETCH NEXT FROM myCur INTO @문항, @답변자, @답변내용
END
CLOSE myCur
DEALLOCATE myCur
--결과가입력된임시테이블조회
SELECT * FROM #TEMP ORDER BY 답변자,문항
DROP TABLE #TEMP
[출처] MsSql : 커서(Cursor)|작성자 김정민
'개발 > MS-SQL' 카테고리의 다른 글
mssql db복원할때 다른db명으로 생성하기 (0) | 2018.01.03 |
---|---|
mssql 스키마 변경(테이블 전체) (0) | 2014.02.18 |
mssql 페이징2 (0) | 2013.01.22 |
asp mssql 페이징 (0) | 2013.01.22 |
mssql IDENTITY 증가값 초기화 (0) | 2012.10.30 |