[Action Plan]
DB01.test 테이블의 데이터와 DB02.test 테이블의 데이터를 DB03.test 테이블로 Migration 쿼리 작성
단 이때 seq (Primary Key)를 변환 하여 중복을 피해준다.
본 예제 에서는 DB02.test.seq 칼럼에 1000을 더하여 Primary Key 중복을 피하도록 하겠다.
[DB 및 Table 구조]
[입력 데이터]
seq 가 PK로 겹치기 때문에 단순 입력은 불가능하다.
[실행 쿼리]
일단 db01.dbo.test01의 데이터는 그대로 입력해 주고, db02.dbo.test01의 데이터는 pk 제약 조건을 해결 하기 위해여 커서를 사용했다.
해당 쿼리에서는 커서를 통해 해당 seq에 1000을 더하여 데이터의 중복의 회피 하였다.
begin tran
insert db03.dbo.test01 -- 먼저 db01의 데이터를 db03에 넣는다.
select seq, inputText from db01.dbo.test01
declare @seqNum int, @inputTextV nvarchar(1000) -- db02의 데이터를 입력할 때 사용할 변수를 선언
declare seqCursor scroll cursor -- 커서를 선언
for
select * from db02.dbo.test01
for read only
open seqCursor
while @@fetch_status = 0
begin
fetch from seqCursor into @seqNum, @inputTextV -- 한라인씩 읽어서 변수에 할당
select @seqNum = @seqNum + 1000
if @seqNum > 2000 -- 마지막 라인의 경우 항상 2번 출력됨므로 해당 출력을 막기 위해 설정한 구문
break
insert db03.dbo.test01
values (@seqNum, @inputTextV)
end
close seqCursor
deallocate seqCursor
commit tran
[기타...]
그리고 쉽게 하는 방법도 있습니다.
역시 전 쿼리에 약하나 봅니다...
하긴 첨 짜보는 쿼리니깐...;;;
최석준님 감사합니다...^^
begin tran
insert db03.dbo.test01
select seq, inputText from db01.dbo.test01
union all
select seq+1000,inputText from db02.dbo.test01
commit tran