DB

[MS-SQL] 데이터 마이그레이션을 위한 스크립트 작성 및 오라클에 있는 ROWNUM 만드는 방법

엑셀파일 데이터를 데이터베이스에 INSERT 작업 후 

실제로 사용하는 테이블에 데이터를 등록해야할 때 사용하면 유용한 스크립트 작성을 하였습니다.

커서(CURSOR)를 사용하여 반복처리해도 되지만

조회 리스트에 순차적인 번호를 조회시 생성하여 질의한 후 WHILE문을 통해 데이터를 INSERT하는 방법입니다.

이 방법은 기존 데이터는 모두 삭제 처리 후 신규로 밀어넣는다는 조건으로 처리되었습니다.

기존 데이터를 살리면서 업데이트 혹은 INSERT를 해야한다면 MERGE문을 사용하거나 

조건을 걸어 UPDATE 또는 INSERT문을 분기하면 됩니다.

 

ROWNUM 만들기

구문(문법)

ROW_NUMBER ( )   
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
  • ROW_NUM() OVER() 또는 RANK() OVER() 함수를 사용하여 순차적인 번호를 생성할 수 있습니다.
  • ROW_NUMBER() OVER (ORDER BY 컬럼명 ASC) AS ROWNUM
  • RANK() OVER (ORDER BY 컬럼명 ASC) AS ROWNUM

 

데이터 마이그레이션 스크립트

USE [TEST_DB]

DECLARE @P_INDEX		INT					= 0
DECLARE @P_RETURN_STR	NVARCHAR(100)		= ''	 
DECLARE @P_MAX			INT					= 219
DECLARE @P_ERROR_CD		VARCHAR(30)			= ''
DECLARE @P_COMP_ID		NVARCHAR(MAX)		= ''

BEGIN TRAN
	--기존 데이터 삭제 
	DELETE FROM TB_PHARMACY WHERE COMPANY_TYPE='test'

	WHILE @P_INDEX <= @P_MAX
	BEGIN 	
		SET @P_COMP_ID = '1111'

		INSERT INTO TB_PHARMACY 
		(
			SYSTEM_TYPE, COMP_ID,..............
		)
		SELECT 
			''test'' , @P_COMP_ID....................
		 FROM (
			SELECT
				ROW_NUMBER() OVER (ORDER BY 거래처명 ASC) ROWNUM,
				 ISNULL(거래처명,'') AS 거래처명, 우편번호, 주소, 전화번호, 팩스번호
				, 거래처코드		
			FROM EXCEL_COMPANY
		) X
		WHERE ROWNUM = @P_INDEX
	
		SET @P_INDEX = @P_INDEX + 1;
	END

COMMIT TRAN

 
 --생성된 데이터 카운트 확인
 SELECT COUNT(1) FROM TB_PHARMACY WHERE COMPANY_TYPE='test'

오늘은 여기까지 !!

위 테이블은 실제 사용하는 테이블이 아니니 참고 하세요.

 

[연관정보]

 

https://playground.naragara.com/1970

 

프로시저 내에서 CURSOR 대신 WHILE 사용하여 반복처리하는 방법

프로시저 내에서 여러가지 작업을 반복적으로 처리해야할 때 CURSOR를 사용해도 되지만 WHILE문을 사용하여 FOREACH문과 동일한 효과를 볼 수 있다. 프로시저내에서 WHILE문을 사용하여 WHILE문 안에서

playground.naragara.com

 

ROW_NUMBER(Transact-SQL) – SQL Server

ROW_NUMBER 함수의 Transact-SQL 참조입니다. 이 함수는 결과 집합의 출력 번호를 매깁니다.

docs.microsoft.com

 

 

 

 

Leave a Reply

error: Content is protected !!