티스토리 뷰

반응형

'CURSOR'는 DBMS의 자원을 비교적 많이 사용하고 속도가 느린 특성 있어 #임시테이블을 활용을 권장

한 건씩 읽어야할 데이터를 임시테이블에 저장하고 WHILE문으로 한 건씩 읽으면서 처리하는 방식

CREATE TABLE #TBL_WORK_1(
	CODE NVARCHAR(10)
	,CNT NUMERIC(18, 0)
)

INSERT INTO #TBL_WORK_1 VALUES('A1', 10), ('A2', 20), ('A3', 30)
-------------------------------------------------------------------

-- 커서용테이블을 만들때 반드시 순번 컬럼이 필요하다(읽을 위치 관리를 위해)
SELECT
	A.CODE
	, A.CNT
	,ORDERS = IDENTITY(INT, 1, 1) -- 테이블에 순번값을 1부터 1씩 증가
INTO #COUSOR1
FROM #TBL_WORK_1 A
WHERE A.CODE < 'A3'
ORDER BY CNT DESC

DECLARE @CURSOR1_CODE		NVARCHAR(10)		-- 커서 데이터 읽을 변수 선언
		,@CURSOR1_CNT		NUMERIC(18, 0)		
		,@CURSOR1_ORDER		INT = 1				-- 커서가 읽을 순번 위치(기본:1)
		,@CURSOR1_TOTAL		INT = @@ROWCOUNT	-- 커서의 총건수(시스템변수 활용)

-- 순번값이 총건수보다 작으면 계속 실행
-- 커서에 저장된 총건수를 체크하면서 반복처리
WHILE (@CURSOR1_ORDER <= @CURSOR1_TOTAL)
	BEGIN

		SELECT @CURSOR1_CODE = A.CODE			-- 커서 테이블에 값을 하나씩 읽어옴
				,@CURSOR1_CNT = A.CNT
		FROM #COUSOR1 A
		WHERE A.ORDERS = @CURSOR1_ORDER

		SELECT CODE		= @CURSOR1_CODE,		-- 읽은 값을 출력
				CNT		= @CURSOR1_CNT

		-- 여기에 추가적인 작업에 필요한 명령을 추가
		---------------------------------------------------------------------------
		SET @CURSOR1_ORDER = @CURSOR1_ORDER + 1	-- 다음 자료를 읽기 위해 순변 변수 + 1 증가

	END

DROP TABLE #COUSOR1

DROP TABLE #TBL_WORK_1

※ 테이블 복사 구문

- SELECT ~ INTO ~ FROM

- WHERE을 사용하여 특정 데이터만 복사

   -> SELECT ~ INTO '새테이블이름' FROM '복사할테이블' WHERE ~

 

 

 

* 도서 'MSSQL Server 기본에서 실무까지' 참조

반응형

'SQL > MSSQL' 카테고리의 다른 글

[MSSQL] 저장 프로시저(STORED PROCEDURE)  (0) 2021.07.27
[MSSQL] TRY CATCH문  (0) 2021.07.22
[MSSQL] 반복문 - WHILE문  (0) 2021.07.19
[MSSQL] 조건문(IF, CASE)  (0) 2021.07.19
[MSSQL] 변수  (0) 2021.07.17
댓글