SQL Merge语句 - 如何处理一对多插入?

时间:2014-07-26 15:19:38

标签: sql sql-server-2008 tsql

目前,这一系列语句基本上在父表和子表中执行一对一插入。我想知道如果子表上有多个共享相同链接数据的子行,我是否可以继续使用合并语句方法在父级中只插入一个语句。

MERGE INTO ParentTable  PT
USING (SELECT field1, field2…
FROM   @TempParentData TMP 
INNER JOIN ThirdTable THR 
ON THR.linkdata = PT.linkdata 
WHERE THR.id = @ID) PT1  
ON 1=2  
WHEN not matched then  
INSERT  (field1, field2…
VALUES  (field1, field2
OUTPUT  PT1.LID   
INTO  @TempLinkData;

INSERT INTO ChildTable  (field1, field2…
SELECT field1, field2…
FROM   @TempParentData TMP 
INNER JOIN ThirdTable THR 
ON THR.linkdata = TMP.linkdata 
WHERE  THR.id = @ID 

1 个答案:

答案 0 :(得分:0)

在合并中的ParentTable字段上执行GROUP BY(即在USING子查询中),并将这些字段(以及任何IDENTITY主键)输出到带有OUTPUT子句且插入<的第二个临时表中/ em>内存表。

将第二个临时表连接到@TempParentData以获取INSERT子行所需的所有内容。