2013-11-03 35 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)。