将数据迁移到备份表(使用外键)

时间:2015-02-23 10:22:51

标签: sql sql-server-2012

场景(简化):

主要表格:

id (pk)
description
date

辅助表:

id (pk)
primaryid(fk)
description

第二表#2:

id (pk)
primaryid(fk)
description

第二表#3:

id (pk)
primaryid(fk)
description

现在我为每个原始表创建了备份表(脚本输出 - 创建)。我想将主表中的date < 2014的所有数据(包括相关数据)移动到备份表,并且只使用一个查询(或尽可能少的)在主表中保留较新的记录。

这是最简单,最安全的方法吗?

1 个答案:

答案 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
------