2015-04-16 5 views
1

Как бы вы перенести НЕКОТОРЫЕ записи из пары таблиц с деталями заголовка (с идентификаторами IDENTITY) в новую пару таблиц в другой БД?Перенос пары таблиц с заголовком-деталями на сервере sql

Например, вам нужно перенести записи с номерами 4,6,9 и 10 из таблицы заголовков и всех их деталей.

Когда вы вставляете записи заголовков в новую таблицу, их идентификаторы будут 1,2,3 и 4. При вставке деталей детская запись с 4 должна указывать на 1, 6 и 2 и так далее ,

Есть ли способ использовать предложение OUTPUT для включения поля, которое не вставлено в таблицу, как способ сопоставить «старый» ID с «новыми»?

+0

Вы можете сделать это с SSIS. В потоке данных для дочерней таблицы был бы поиск, чтобы получить новый родительский идентификатор. –

ответ

0

Предложение OUTPUT инструкции INSERT позволит вам выбирать значения, которые фактически вставлены в таблицу целей. Вы можете обойти это, используя вместо этого MERGE, поскольку предложение OUTPUT оператора MERGE позволит вам выбирать значения из исходных данных. Вот пример:

declare @src table (id bigint, data char); 
declare @dest table (id bigint identity(1,1), data char); 
insert @src values (4, 'A'), (6, 'B'), (9, 'C'), (10, 'D'); 

insert @dest (data) 
    output inserted.id, S.id -- ERROR 
    select data from @src S; 

merge @dest D 
    using @src S on 1 = 0 
    when not matched then 
     insert (data) values (S.data) 
     output inserted.id as [New ID], S.id as [Old ID]; -- LEGAL 

Результаты MERGE заявления:

New ID Old ID 
1  4 
2  6 
3  9 
4  10