正在 sql 服务器上迁移 header-detail 对表
Migrating a header-detail pair of tables on sql server
您如何将一些记录从 header-detail 对 table(具有 IDENTITY ID)迁移到另一个数据库中的一对新的 table?
例如,您需要从 header table 迁移编号为 4、6、9 和 10 的记录及其所有详细信息。
当您在新 table 上插入 header 记录时,它们的 ID 将为 1、2、3 和 4。插入详细信息时,child 记录来自 4将需要指向 1、6 到 2 等等。
有没有办法使用 OUTPUT 子句来包含未插入 table 的字段,作为将 "old" ID' 与 "new" 配对的方法?
INSERT
语句的 OUTPUT
子句将只允许您 select 实际插入目标 table 的值。您可以通过使用 MERGE
来解决这个问题,因为 MERGE
语句的 OUTPUT
子句也允许您从源数据中获取 select 值。这是一个例子:
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
您如何将一些记录从 header-detail 对 table(具有 IDENTITY ID)迁移到另一个数据库中的一对新的 table?
例如,您需要从 header table 迁移编号为 4、6、9 和 10 的记录及其所有详细信息。
当您在新 table 上插入 header 记录时,它们的 ID 将为 1、2、3 和 4。插入详细信息时,child 记录来自 4将需要指向 1、6 到 2 等等。
有没有办法使用 OUTPUT 子句来包含未插入 table 的字段,作为将 "old" ID' 与 "new" 配对的方法?
INSERT
语句的 OUTPUT
子句将只允许您 select 实际插入目标 table 的值。您可以通过使用 MERGE
来解决这个问题,因为 MERGE
语句的 OUTPUT
子句也允许您从源数据中获取 select 值。这是一个例子:
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