사용자 도구

사이트 도구


sqlserver:cursor

문서의 이전 판입니다!


CURSOR사용하기

MS SQL Server에서는 For-Cursor문이 지원되지 않는다.(무식하게도..)

방법1

WHILE @@FETCH_STATUS = 0를 이용하는 방법으로 표준적인 방법

DECLARE 
    @product_name VARCHAR(MAX), 
    @list_price   DECIMAL;
 
DECLARE cursor_product CURSOR
FOR SELECT 
        product_name, 
        list_price
    FROM 
        production.products;
 
OPEN cursor_product;
 
FETCH NEXT FROM cursor_product INTO 
    @product_name, 
    @list_price;
 
WHILE @@FETCH_STATUS = 0
    BEGIN
        BEGIN TRY
          PRINT @product_name + CAST(@list_price AS VARCHAR);
        END TRY
        BEGIN CATCH
          PRINT 'ERROR' + ERROR_MESSAGE()
        END CATCH
        FETCH NEXT FROM cursor_product INTO 
            @product_name, 
            @list_price;
    END;
 
CLOSE cursor_product;
 
DEALLOCATE cursor_product;

방법2

무한루프를 이용하여 FETCH문을 한번만 기술한다. 한가지 문제점이 있다면 @@FETCH_STATUS는 GLOBAL변수라는 것이다.

@@FETCH_STATUS

이 함수는 현재 연결에서 연 모든 커서에 실행된 마지막 커서 FETCH 문의 상태를 반환합니다.

DECLARE cursor_product CURSOR
FOR SELECT 
        product_name, 
        list_price
    FROM 
        production.products
 
OPEN cursor_product
 
WHILE 1 = 1 
   BEGIN
        FETCH NEXT FROM cursor_product
              INTO @product_name, 
                   @list_price
 
        IF @@FETCH_STATUS <> 0 BREAK
 
        -- 작업을 기술
        PRINT @product_name + CAST(@list_price AS VARCHAR)
   END
sqlserver/cursor.1596170448.txt.gz · 마지막으로 수정됨: 2025/04/15 10:05 (바깥 편집)