我有两个父子关系表。我想将他们的一些记录复制到另外两个表,也有父子关系,但表结构略有不同。
两组表都有一个外键,一个整数列。所有表的主键列都具有标识增量。
如果我从源父表到目标父表执行SELECT INTO
,则目标记录的主键值将与源记录不同,并且父子关系将丢失。
有没有人知道如何在复制过程中保留这种关系,因为我在新的父表中会有新的主键值?在此复制过程中,我不希望为新表设置标识增量,因为无法保证源表中的主键值不会在目标中。
希望我的描述有意义,并感谢您的意见。如果我能进一步澄清,请告诉我。
答案 0 :(得分:4)
当我这样做时,我是通过在插入新表后保留旧ID来实现的。
有些人使用旧ID添加临时列,但我知道更好的方法。
您可以使用the OUTPUT clause将插入的记录插入临时表(将新ID和旧ID作为映射表。然后在插入子记录时加入到该表。
像这样的东西(原油)
DECLARE @MyTableVar TABLE (
NewID INT,
OldID INT
)
INSERT NewParentTable
OUTPUT
INSERTED.ID,
old.ID
INTO @MyTableVar
SELECT *
FROM OldParentTable old
INSERT NewChildTable
SELECT
old.ID,
t.NewID,
old.name
FROM OldChildTable old
INNER JOIN @MyTableVar t ON t.OldID = old.ParentID
答案 1 :(得分:1)
您必须在表中的单独列中使用相应的parentID维护原始ID。 因此,在目标表中,您需要添加parentID_orig列(而非自动编号)以保留链接。