簡體   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