【发布时间】:2020-06-09 11:10:36
【问题描述】:
我有一个简单的 SQL 查询,我打算将它放入一个存储过程中,以便将旧数据从一个表移动到一个存档表中。我知道有很多方法可以做到这一点,但这是我想出的:
DECLARE @days INT
SELECT Product.* INTO
ProductArchive
WHERE OrderDateTimeUTC = DATEADD(d, -(@days), GETUTCDATE())
这个想法是让它成为一个每隔一段时间运行的 SQL 作业。 有没有为此的“最佳实践”?主表在任何时候都只有少于 2000 行。
【问题讨论】:
-
您的代码将数据复制而不是移动到新表中,并且如果多次运行将出错,因为目标表已经存在。存档数据的许多其他方法之一是创建与源具有相同架构的存档表,并使用带有
OUTPUT子句的 DELETE 定期移动行。最佳做法是指定显式列列表而不是*。 -
最多 2000 行并不是那么多。因此,也许,如果您只想存档它们而这与性能无关,您可以添加一些标志
active或archived可以定期更新,然后在视图或应用程序中使用?
标签: sql sql-server stored-procedures ssms