1

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

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

当您在新表上插入表头记录时,它们的 ID 将为 1、2、3 和 4。插入详细信息时,来自 4 的子记录将需要指向 1、6 到 2 等等。

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

4

1 回答 1

0

语句的OUTPUT子句INSERT只允许您选择实际插入到目标表中的值。您可以使用 aMERGE来解决此问题,因为语句的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
于 2015-04-16T15:12:44.177 回答