SQL Server 2005:用于将行从一个表移动到另一个表的存储过程

时间:2010-10-29 15:22:11

标签: sql sql-server-2005 stored-procedures

我有两张完全相同的表格。我需要将超过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

我的问题是:

  1. 执行此操作的最有效方法是什么(选择在高音量下表现良好)?表A中将包含约180,000,000行,并且需要一次将〜4,000,000行移动到表B.

  2. 如何在一个事务下封装它,这样如果将表中的行插入表B时我就不会删除表A中的行。我只是想确保不会意外删除一行来自表A,除非我已成功将其写入表B.

  3. 您推荐哪些优秀的SQL Server 2005书籍?

  4. 谢谢, 克里斯

2 个答案:

答案 0 :(得分:0)

我认为SSIS可能是满足您需求的最佳解决方案。

我认为您可以使用Data Flow task之类的SSIS任务来满足您的需求。似乎没有必要为逻辑单独创建一个过程。

可以使用TransactionOption属性为任何数据流任务设置事务。 Check out this article as to how to use Transactions in SSIS

关于SSIS包的一些基本教程以及如何创建它们可以参考herehere

答案 1 :(得分:0)

关于 如何在一个事务下封装它,以便在表A中插入错误时不会删除表中的行。

您可以使用连接删除A中B的所有行。然后,如果复制到B失败,则不会从A中删除任何内容。