首页 > 解决方案 > 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?谢谢。

标签: sql-servertsql

解决方案



推荐阅读