【问题标题】:SQL Server 2005: stored procedure to move rows from one table to anotherSQL Server 2005:将行从一个表移动到另一个表的存储过程
【发布时间】:2010-10-29 15:22:10
【问题描述】:

我有 2 个相同方案的表。我需要将超过 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 书籍推荐吗?

谢谢, 克里斯

【问题讨论】:

  • 如果您发布代码或 XML,在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮 (101 010) 以很好地格式化和语法高亮
  • 这是计划/触发任务吗?您需要多久执行一次此操作?
  • 好吧,我的想法是,这个存储过程将从计划每天运行两次的 SSIS 包中执行。
  • 我是 SSIS 新手,但根据我对 SSIS 的理解,我是否还需要在数据库中编写存储过程,然后从 SSIS 包中调用该过程?还是我错过了什么?

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


【解决方案1】:

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

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

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

SSIS包的一些基础教程以及如何创建可以参考herehere

【讨论】:

    【解决方案2】:

    关于 如何将其封装在一个事务中,以便在将行插入表 B 时出错,我不会从表 A 中删除行。

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

    【讨论】:

    • 好主意,我会尝试删除
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多