Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  PK가 설정된 테이블 두개를 한테이블로 데이터 이전 
작성일시 : 2008. 3. 25. 22:36 | 분류 : SQL Server/Administration

[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

|