Миграция пары таблиц заголовка и детализации на сервере sql

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

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

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

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

1 ответ

Решение

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
Другие вопросы по тегам