2009-09-08 4 views
0

여러 SQL Server 데이터베이스를 하나로 병합하려고합니다. 문제는 테이블 중 하나에 기본 키로 ID 필드가 있다는 것입니다. 테이블에는 두 개의 고유 필드가 있습니다. 즉, 쿼리 데이터가 중복됩니다 여러 번 실행된다 제외하고, 작동SQL Server 데이터베이스 병합

declare @maxId as int 
set @maxId = (SELECT IsNull(MAX(id),0) FROM datatable) 
SET IDENTITY_INSERT datatable ON 
INSERT INTO database1.datatable id, link1, link2 SELECT id + @maxId, link1, link2 FROM database2.datatable 
SET IDENTITY_INSERT datatable OFF 

: 뭔가 같은 :

datatable: 
id pk identity 
link1 uniqueid 
link2 uniqueid 

내 초기 생각은 다음 스크립트를 실행하는 것이 었습니다. link1과 link2의 조합이 내 테이블에 없는지 확인하는 가장 좋은 방법은 무엇입니까?

하나의 열만있는 경우 IN 문을 사용할 수 있지만 불행하게도 두 열이 일치해야합니다.

답변

1

IN을 언급 했으므로 링크 열을 병합한다고 가정합니다. 이 방법은 여러 번 실행하는 것이 안전하며 IDENTITY 열 문제를 방지합니다.

INSERT INTO database1.datatable (link1, link2) 
SELECT link1, link2 
FROM database2.datatable d2 
WHERE NOT EXISTS (SELECT * 
    FROM 
     database1.datatable d1 
    WHERE 
     d1.link1 = d2.link1 and d1.link2 and d2.link2) 

가 잘못 경우에도 /이 NOT IN 절은 ...

+0

가 정확히 정보를 내가 찾던 할 수없는 여러 열을 처리하기 위해 존재 EXISTS 사용할 수 있습니다. 감사. – Kyle