2016-12-16 112 views
2

我可以使用您的专业知识。我有以下代码:插入...合并...选择(SQL Server)

INSERT INTO Table3 (Column2, Column3, Column4, Column5) 
SELECT null, 110, Table1.ID, Table2.Column2 
FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 

现在我需要采取Inserted.ID(即在刀片上产生表3的身份)和Table2.ID并将其插入到任意一个临时表或表变量。通常我会使用OUTPUT子句,但是OUTPUT无法从不同的表中获取数据。现在我相信它可以用MERGE完成,但我不知道如何去做。我需要像这样:

INSERT INTO Table3 (Column2, Column3, Column4, Column5) 
OUTPUT Inserted.ID, Table2.ID into @MyTableVar 
SELECT null, 110, Table1.ID, Table2.Column2 
FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 

我很抱歉,如果这是一个重复的问题,但我找不到任何东西。

+0

您可能需要这样做,方法是将要插入的值插入临时表中,然后使用“OUTPUT”获取新的产出价值。 –

回答

2

诀窍是使用MERGE声明而不是INSERT...SELECT来填充表格。这允许您在输出子句中使用来自插入数据和源数据的值:

MERGE INTO Table3 USING 
(
    SELECT null as col2, 
      110 as col3, 
      Table1.ID as col4, 
      Table2.Column2 as col5, 
      Table2.Id as col6 
    FROM Table1 
    JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 
    JOIN Table2 on Table1Table2Link.Column2=Table2.ID 
) AS s ON 1 = 0 -- Always not matched 
WHEN NOT MATCHED THEN 
INSERT (Column2, Column3, Column4, Column5) 
VALUES (s.col2, s.col3, s.col4, s.col5) 
OUTPUT Inserted.ID, s.col6 
INTO @MyTableVar (insertedId, Table2Id); 
+0

感谢您的帮助和快速响应! –

+0

永远不会知道这个.. +1 –

+0

@Prdp:我只有当我不得不添加多个父母 - 孩子的数据时才知道它。你可能会发现[我的解决方案](http://stackoverflow.com/questions/38213008/t-sql-insert-data-into-parent-and-child-tables)有一天会有帮助。 –