场景(简化):
主要表格:
id (pk)
description
date
辅助表:
id (pk)
primaryid(fk)
description
第二表#2:
id (pk)
primaryid(fk)
description
第二表#3:
id (pk)
primaryid(fk)
description
现在我为每个原始表创建了备份表(脚本输出 - 创建)。我想将主表中的date < 2014
的所有数据(包括相关数据)移动到备份表,并且只使用一个查询(或尽可能少的)在主表中保留较新的记录。
这是最简单,最安全的方法吗?
答案 0 :(得分:0)
无法使用单个查询移动数据。创建临时表并根据您的条件复制主表ID(如date < 2014
),然后将数据从主表复制到与Temp表连接的备份表。
使用临时表中的ID从主表中删除之后。伪代码。
Create Table #TempTable(Id primaryTableId)
insert into #TempTable
select Id from primaryTable where date < 2014
insert into Primary-backuptable(col1, col2,.. )
select col1, col2.. from primaryTable PT
JOIN #TempTable TT ON PT.ID = TT.ID
--Copy related tables
--------
--------
DELETE related tables
DELETE FROM SECONDARYTABLE3 ST
JOIN primaryTable PT ON ST.PTId = PT.Id
JOIN #TempTable TT ON PT.ID = TT.ID
------