插入...合并...选择(SQL Server)

时间:2016-12-16 12:21:22

标签: sql 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(在insert上生成的Table3的Identity)和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

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

1 个答案:

答案 0 :(得分: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);