我有两张完全相同的表格。我需要将超过90天的行(基于表中存在的dataTime列)从表A移动到表B.这是我想要做的伪代码
SET @Criteria = getdate()-90
Select * from table A
Where column X<@Criteria
Into table B
--now clean up the records we just moved to table B, in Table A
delete from table A Where column X<@Criteria
我的问题是:
执行此操作的最有效方法是什么(选择在高音量下表现良好)?表A中将包含约180,000,000行,并且需要一次将〜4,000,000行移动到表B.
如何在一个事务下封装它,这样如果将表中的行插入表B时我就不会删除表A中的行。我只是想确保不会意外删除一行来自表A,除非我已成功将其写入表B.
您推荐哪些优秀的SQL Server 2005书籍?
谢谢, 克里斯
答案 0 :(得分:0)
我认为SSIS可能是满足您需求的最佳解决方案。
我认为您可以使用Data Flow task之类的SSIS任务来满足您的需求。似乎没有必要为逻辑单独创建一个过程。
可以使用TransactionOption属性为任何数据流任务设置事务。 Check out this article as to how to use Transactions in SSIS
答案 1 :(得分:0)
关于 如何在一个事务下封装它,以便在表A中插入错误时不会删除表中的行。
您可以使用连接删除A中B的所有行。然后,如果复制到B失败,则不会从A中删除任何内容。