繁体   English   中英

在SQL Server上迁移表头-表对

[英]Migrating a header-detail pair of tables on sql server

您如何将某些记录从表头详细信息对表(具有IDENTITY ID)迁移到另一个数据库中的新表对?

例如,您需要从头表及其所有详细信息中迁移编号为4,6,9和10的记录。

当您在新表上插入标头记录时,它们的ID将分别为1,2,3和4。插入详细信息时,从4开始的子记录将需要指向1、6到2,依此类推。

有没有一种方法可以使用OUTPUT子句包含未插入表中的字段,以将“旧” ID'与“新” ID配对?

INSERT语句的OUTPUT子句仅允许您选择实际插入到目标表中的值。 您可以改用MERGE来解决此问题,因为MERGE语句的OUTPUT子句也允许您从源数据中选择值。 这是一个例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM