在插入时合并并获取标识

时间:2013-11-03 02:11:23

标签: sql-server tsql merge

我需要将#temp_table中的新项目合并到table_a中。

还有一个parent_table,它有一个主键标识列parent_table_id(而table_a有一个parent_table_id对应的外键列。 table_a中的每个项目都指向父表中的相应条目。

因此,对于#temp_table中的每个项目,我需要同时插入table_aparent_table

问题是,假设我首先合并到parent_table,如何在所有parent_table_id插入中设置所有相应的table_a项?我在考虑向parent_table_id添加#temp_table列,最初设置为null,然后在合并后用值填充它,但我不太确定如何解决这个问题。 parent_table中没有其他唯一列可用于在插入新列后选择新列,而不是parent_table_id

1 个答案:

答案 0 :(得分:0)

以下是这样做的一般方法(剥离):

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);

包含所有父表id的@Ids中的结果以及来自其他地方的其他重要信息(即加入table_a)。