sql server数据定时迁移

把数据定时的从一个表迁移到另外一个表,(先查询、插入后删除)

比如有两个表A、B。
每天产生的新数据都存入A,但是时间久了之后A的数据积累了很多,效率降低很大。现在创建新表B,每天执行存储过程把A表中的六个月之前的数据迁入B表中。现在我写的存储过程类似与下面的代码,但是这么写相当于执行了两遍,不知道大家有没有什么效率比较高的方法,谢谢!

if OBJECT_ID ( 'A', 'P' ) IS NOT NULL
    DROP A
go
CREATE PROCEDURE A
AS BEGIN
    INSERT INTO B (ID,,,,, )
    SELECT ID, ,,,,
    FROM A
    WHERE DATEDIFF(MONTH, A.time, GETDATE()) > 6;
  END
  BEGIN
    DELETE FROM A
    WHERE DATEDIFF(MONTH, A.TIME, GETDATE()) > 6;  
  END    
阅读 4.2k
1 个回答
    DELETE FROM A output deleted.id ,DELETED..... into B(id, .....) WHERE A.TIME <= dateadd(month , -6 , getdate())

通过delete的output子句直接输出到B表中,这样就只要对A表访问一次,然后将where条件 A.TIME <= dateadd(month , -6 , getdate()) , 如果A.time上存在索引的话这样可以充分利用都索引,而将A.time放在表达式中将没办法充分利用到对应的索引

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进