在SQL中复制父表和子表

时间:2019-03-11 17:24:54

标签: sql sql-server tsql

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

我知道我可以写类似的东西

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

但是,如果我这样做,如何使孩子与父母保持联系?还有另一种更好的方法可以使我保持在一起吗?

1 个答案:

答案 0 :(得分:0)

我最终要做的是创建一个包含新旧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

那行得通。不过,我敢肯定还有一种更为优雅的方法。