개발/MS-SQL

mssql cursor

쭈니후니 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)|작성자 김정민