Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL合并语句-如何处理一对多插入?_Sql_Sql Server 2008_Tsql - Fatal编程技术网

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

SQL合并语句-如何处理一对多插入?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,目前,这一系列语句基本上在父表和子表中执行一对一的插入。我想知道当子表上有多个子行共享相同的链接数据时,是否可以继续使用merge语句方法在父表中只插入一条语句 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

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

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 

对合并中的ParentTable字段(即在USING子查询中)执行GROUP BY,并将这些字段(连同任何标识主键)输出到第二个临时表中,其中包含output子句和插入的内存表

将第二个临时表连接到@TempParentData,以获得插入子行所需的一切