sql server数据定时迁移

发布于 2022-08-30 01:32:58 字数 540 浏览 14 评论 0

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

比如有两个表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    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠檬色的秋千 2022-09-06 01:32:58
    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放在表达式中将没办法充分利用到对应的索引

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文