[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