Миграция пары таблиц заголовка и детализации на сервере 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