[英]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.