我有两个具有父子关系的表。我想将他们的一些记录复制到另外两个表,也具有父子关系,但表结构略有不同。
两组表都涉及一个外键,一个整数列。所有表的主键列都有标识增量。
如果我SELECT INTO从源父表到目标父表,目标记录的主键值将与源记录不同,父子关系将丢失。
鉴于我将在新的父表中有新的主键值,有谁知道我如何在复制期间保留这种关系?我不希望在此复制过程中为新表设置标识增量,因为不能保证源表中的主键值不会已经在目标中。
希望我的描述有道理,感谢您的意见。让我知道我是否可以进一步澄清。
我有两个具有父子关系的表。我想将他们的一些记录复制到另外两个表,也具有父子关系,但表结构略有不同。
两组表都涉及一个外键,一个整数列。所有表的主键列都有标识增量。
如果我SELECT INTO从源父表到目标父表,目标记录的主键值将与源记录不同,父子关系将丢失。
鉴于我将在新的父表中有新的主键值,有谁知道我如何在复制期间保留这种关系?我不希望在此复制过程中为新表设置标识增量,因为不能保证源表中的主键值不会已经在目标中。
希望我的描述有道理,感谢您的意见。让我知道我是否可以进一步澄清。
完成此操作后,我通过在插入新表后保留旧 ID 来做到这一点。
有些人使用旧 ID 添加临时列,但我知道更好的方法。
您可以使用OUTPUT 子句将插入的记录插入到临时表中(将新旧 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
You'd have to maintain the original ID in a separate column in the table with the corresponding parentID. So in your destination table, you'd need to add an parentID_orig column (not auto-number) to retain the link.