2017-07-19 62 views
1

我目前正在進行某種數據映射。可以說我有以下三個表:插入時,輸出的列不能插入但是已連接表

TemporaryTable

 
RUNID | DocId | Amount 
E  7  50 
C  6  12 

表1

 
T1ID | DocID | Amount 
1  5  10 
2  6  20 
3  6  50 

表2

 
T2ID | RUNID | T1Id 
1  B  1 
2  C  2 
3  D  3 

在表Table1Table2T1IDT2ID是自動填充的標識列。 我想現在要做的就是從TemporaryTable值插入Table1TemporaryTable保存RunID列中的值和新生成的T1IDTable2

結果表應該是這樣的:

表1

 
T1ID | DocID | Amount 
1  5  10 
2  6  20 
3  6  50 
4  7  50 
5  6  12 

表2

 
T2ID | RUNID | T1Id 
1  B  1 
2  C  2 
3  D  3 
4  E  4 
5  C  5 

我想在output聲明的幫助下這樣做。這樣的事情:

CREATE TABLE #map(T1ID, RUNID) 
INSERT INTO Table1(DocId, Amount) 
OUTPUT inserted.T1ID, t.RunId INTO #map 
SELECT t.DocId, t.Amount 
FROM TemporaryTable t 

這顯然不起作用,因爲我沒有訪問輸出語句中的t.RunId。這怎麼能做到?

+0

我不知道這是否應該被關閉的重複,但這裏有2個非常相關問題(與答案):https://stackoverflow.com/questions/41184310/insert-into-merge-select-sql-server/41184461#41184461 而第二個:https://stackoverflow.com/questions/ 38213008/t-sql-insert-data-into-parent-and-child-tables –

回答

4

可以使用MERGE命令一些總是假的條件來模擬可用的所有列的插入在OUTPUT

MERGE Table1 t1 
USING TemporaryTable t 
    ON 1=2 
WHEN NOT MATCHED THEN 
    INSERT (DocId, Amount) 
    VALUES (t.DocId, t.Amount) 
    OUTPUT inserted.T1ID, t.RunId 
    INTO #map ; 
+0

感謝您的幫助!最後是MERGE的真正好處! –