MS SQL Server에서는 For-Cursor문이 지원되지 않는다.(무식하게도..)
이 함수는 현재 연결에서 연 모든 커서에 실행된 마지막 커서 FETCH 문의 상태를 반환합니다.
@@FETCH_STATUS는 연결의 모든 커서에 전역으로 적용되므로 신중히 사용하세요.
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;
무한루프를 이용하여 FETCH문을 한번만 기술한다. 한가지 문제점이 있다면 @@FETCH_STATUS는 연결에서 GLOBAL변수라는 것이다.
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 CLOSE cursor_product; DEALLOCATE cursor_product;