mssql cursor

개발/MS-SQL 2013. 6. 10. 19:30

* 커서 (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
블로그 이미지

쭈니후니

개발자로서 공부와 낚시를 좋아하는 한사람으로서의 추억을 담을 블로그입니다.

,