2013-11-03 66 views
0

我需要合併#temp_table中的新項目爲table_a合併並在插入時獲取標識

還有一個parent_table,它有一個主鍵標識列parent_table_id(和table_a有一個parent_table_id對應的外鍵列)。 table_a中的每個項目都指向父表中的相應條目。

因此,對於#temp_table中的每個項目,我需要同時插入table_aparent_table

問題是,假設我首先合併到parent_table,我如何才能在所有的table_a插入中設置所有對應的parent_table_id項目?我正在考慮爲#temp_table添加一個parent_table_id列,最初設置爲null,然後在合併後用值填充它,但我不太清楚如何去做這件事。 parent_table中沒有其他唯一列可用於選擇插入後的新列,而不是parent_table_id

+0

檢查['OUTPUT'](http://technet.microsoft.com/en-us/library/ms177564.aspx?ppud=4)子句。它適用於INSERT,DELETE,UPDATE和MERGE語句,處理多行,並提供對_before_和_after_數據的訪問(如適用)。 – HABO

+0

@HABO整潔,看起來很有希望。 – JSideris

回答

0

以下是這樣做的一個通用的方法(剝離下來):在含有所有父表ID與來自源的其他重要信息可在別處使用@Ids

MERGE parent_table AS TARGET 
USING @temp_table AS SOURCE 
ON 
(
    TARGET.match_number = SOURCE.match_Number 
) 
WHEN NOT MATCHED THEN 
    INSERT 
    (
     item1, 
     item2, 
     item3 
    ) 
    VALUES 
    (
     SOURCE.item1, 
     SOURCE.item2, 
     SOURCE.item3, 
    ) 
OUTPUT INSERTED.parent_table_id, SOURCE.reference_number INTO @Ids (parent_table_id, reference_number); 

結果(即,對於加入到table_a)。