2016-12-16 111 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)有一天會有幫助。 –