分层数据复制

时间:2018-12-10 19:02:33

标签: sql sql-server join merge

在父子关系中,我有一个如下所示的主表,记录超过2000条

表名称:MasterTable

Id     ReqId       Title                  ParentId
---------------------------------------------------
1      AC1.        Account Control.       null
2      Ac1-1.      account c.             1
3      Ac1-1-1.    account c.             2

另一个表是子表,我需要在其中复制以下相同层次结构中的数据

TableName:ChildTable(复制后的示例数据)

Id     ReqId             Title                  ParentId    MasterTableId
--------------------------------------------------------------------
101    AC1.              Account Control.       null           1
102    Ac1-1.            account c.             101            2
103    Ac1-1-1.          account c.             102            3

我尝试过的方法是先使用insert into ... select语句插入数据,然后使用与主表和自连接的联接更新父ID,但是此查询需要2 -5秒的时间来更新。

我已经使用以下查询来更新父ID

insert into ChildTable(ReqId,Title,ParentId,MasterTableId) 
select ReqId,Title,null,Id from MasterTable

插入后,我正在更新子表的父ID

UPDATE TSR1
set ParentId = TSR2.Id
from ChildTable TSR1 
JOIN MasterTable SR ON TSR1.MasterTableId = SR.Id
JOIN ChildTable TSR2 ON TSR2.MasterTableId = SR.ParentId
WHERE SR.ParentId IS NOT NULL

有人可以建议对上述数据复制进行有效的查询吗?

0 个答案:

没有答案