2009-09-08 2 views
0

Я пытаюсь объединить несколько баз данных SQL Server в один. Проблема в том, что в одной из таблиц в качестве первичного ключа есть поле идентификации. В таблице также есть два уникальных поля. Что-то вроде:Объединить базы данных SQL Server

datatable: 
id pk identity 
link1 uniqueid 
link2 uniqueid 

Моя первая мысль была запустить следующий сценарий:

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 

который работает, за исключением того, что запрос выполняется несколько раз данные получает дублируется. Что было бы лучшим способом убедиться, что сочетание 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) 

Если это не так, вы все еще можете использовать EXISTS/NOT EXISTS, чтобы иметь дело с несколькими колонками, что положение IN не могу ...

+0

Именно информации, которую я искал. Благодарю. – Kyle

Смежные вопросы