4

我有两个具有父子关系的表。我想将他们的一些记录复制到另外两个表,也具有父子关系,但表结构略有不同。

两组表都涉及一个外键,一个整数列。所有表的主键列都有标识增量。

如果我SELECT INTO从源父表到目标父表,目标记录的主键值将与源记录不同,父子关系将丢失。

鉴于我将在新的父表中有新的主键值,有谁知道我如何在复制期间保留这种关系?我不希望在此复制过程中为新表设置标识增量,因为不能保证源表中的主键值不会已经在目标中。

希望我的描述有道理,感谢您的意见。让我知道我是否可以进一步澄清。

4

2 回答 2

4

完成此操作后,我通过在插入新表后保留旧 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
于 2010-10-19T16:46:03.923 回答
1

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.

于 2010-10-19T16:44:48.030 回答