【问题标题】:Copying parent and child tables in SQL [duplicate]在 SQL 中复制父表和子表 [重复]
【发布时间】:2019-03-11 17:24:54
【问题描述】:

我有一个包含 Parent(ParentID, ParentData) 和 Child (ChildID, ParentID, ChildData) 表的数据库。我需要编写一个脚本,将两个表复制到一个新数据库中,但两个表都具有新的 ParentID。

我知道我可以写这样的东西:

INSERT INTO Parent(ParentID, ParentData)
SELECT newid(), ParentData FROM OtherDB.dbo.Parent

但是,如果我这样做,我该如何让孩子与父母保持联系呢?还有其他更好的方法可以让我将它们保持在一起吗?

【问题讨论】:

  • 如果表在不同的数据库中,为什么还需要新的 ID?
  • 因为 OtherDB 是一个示例数据库,每个被复制到的数据库都是一个多租户数据库,可能需要多次将这些值复制到其中。
  • 您可以将 OUTPUT 子句用于另一个包含新 ID 和原始 ID 列的表。这样,您就可以将新旧 id 绑定在一起,以便在插入子项时将其用作连接。

标签: sql sql-server tsql


【解决方案1】:

我最终做的是创建一个包含新旧 ID 的临时表,我可以像这样引用它:

CREATE TABLE #TempParent(OldParentID, NewParentID, ParentData)

INSERT INTO #TempParent
SELECT(ParentID, newid(), ParentData)
FROM OtherDB.dbo.Parent

INSERT INTO Parent(ParentID, ParentData)
SELECT(NewParentID, ParentData)
FOM #TempParent

INSERT INTO Child(ParentID, ChildData)
SELECT p.NewParentID, c.ChildData
FROM OtherDB.dbo.Child c
LEFT JOIN #TempParent p ON p.OldParentID = c.ParentID

DROP TABLE #TempParent

这行得通。不过,我确信有一种更优雅的方法可以做到这一点。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2011-11-06
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多