sql-server - SQL Server 中归档表的正确查询
问题描述
我写了两个查询,我想知道如果我的团队选择使用查询进行归档,那么归档表的最佳实践是什么。我们正在寻找最有效但不会损害任何数据完整性的解决方案。我们希望在一些最大的表中只保留过去 18 个月的数据,目前还不知道我们将多久运行一次此存档,但我想每个月一次。
选项 1:没有循环
DECLARE @18Months datetime = DATEADD(m, -18, CAST(GETDATE() AS Date))
BEGIN TRY
BEGIN TRANSACTION t1
INSERT INTO tblOneArchive
SELECT * FROM tblOne WHERE dateField < @18Months
DELETE FROM tblOne WHERE datefield < @18Months
COMMIT TRANSACTION t1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION t1
END CATCH
选项 2:使用循环
DECLARE @id INT
SELECT @id = MIN(ID) FROM tblOne WHERE dateField < @18Months
WHILE @id IS NOT NULL
BEGIN
BEGIN TRANSACTION t2
INSERT INTO tblOneArchive
SELECT * FROM tblOne WHERE ID = @id
DELETE FROM tblOne WHERE ID = @id
COMMIT TRANSACTION t2
SELECT @id = MIN(ID) FROM tblOne WHERE ID > @id AND dateField < @18Months
END
如果选项 2 是最好的,我应该如何处理 try catch?谢谢。
解决方案
推荐阅读
- c - 如何更好地实现诸如等待控制我创建的进程运行顺序的功能?
- rust - 确定两个路径是否在同一个文件系统上
- c# - Unity LineRenderer Gradient 不适用于自定义颜色
- eloquent - 从 2 个深度多对多关系中获取一个集合结果
- python - 如果选择!=“y”或选择!=“是”,布尔“或”运算符不会返回正确的结果:
- asp.net-core - 无法在 POST 调用中接收来自 Route 和 Body 的值
- powerbi - 如何从我的数据表中的一个位置获取一个值并将其放入一个新列中
- javascript - 使用 VS Code Live Server 打开与使用鼠标垫打开时,开发工具中的脚本元素不同
- ruby-on-rails - 如何访问 belongs_to 属性的父级
- c# - 如何将数据从类文件传递到剃须刀页面?