gpt4 book ai didi

SQL 存档脚本

转载 作者:行者123 更新时间:2023-12-02 13:17:49 25 4
gpt4 key购买 nike

我正在尝试将数据库中的表中的记录存档到存档数据库中的相同表中。我需要能够对日期大于三年前的所有记录进行插入,然后删除这些行。然而,这个表有数百万条实时记录,所以我想在一次大约 100 到 1000 个 block 的循环中运行它。到目前为止,我的存储过程执行了整个插入语句,然后是删除语句(在事务中),其 WHERE 子句与插入语句基本相同。我的 WHILE 循环正在查找表中最旧的日期以确定循环何时完成。其中一些似乎效率很低。有没有一种方法可以对记录 block 进行插入和删除,而不必在同一个循环执行中查找它们两次?有没有更好的方法来确定 WHILE 语句何时完成?运行 MS SQL Server 2000。

这是我当前的过程(ISAdminDB 是主数据库,ISArchive 是存档数据库):

    WHILE ( (SELECT MIN( [MyTable].[DateTime]) FROM  [ISAdminDB].[dbo].[MyTable]) < DATEADD(d, -(3 * 365), GetDate()))
BEGIN

INSERT INTO [ISArchive].[dbo].[MyTable]
(<Fields>)
SELECT TOP 1000 (<Fields>)
FROM [ISAdminDB].[dbo].[MyTable]
WHERE
[MyTable].[DateTime] < DATEADD(d, -(3 * 365), GetDate())
AND UniqueID in (SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] ORDER BY [MyTable].[DateTime] ASC )

BEGIN TRAN
DELETE FROM [ISAdminDB].[dbo].[MyTable]
WHERE [MyTable].[DateTime] < DATEADD(d, -(3 * 365), GetDate())
AND (UniqueID in (SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] ORDER BY [MyTable].[DateTime] ASC))
COMMIT

END

最佳答案

首先,您要删除早于特定日期(3 年前)的记录。你并不关心它们被删除的顺序,你只需要不断删除它们,直到没有剩余为止。您还可以通过使用临时表来存储 ID,以及将截止日期存储在变量中并重复引用它来加快速度。

现在我们有:

DECLARE @NextIDs TABLE(UniqueID int primary key)
DECLARE @ThreeYearsAgo datetime
SELECT @ThreeYearsAgo = DATEADD(d, -(3 * 365), GetDate())

WHILE EXISTS(SELECT 1 FROM [ISAdminDB].[dbo].[MyTable] WHERE [MyTable].[DateTime] < @ThreeYearsAgo)
BEGIN
BEGIN TRAN

INSERT INTO @NextIDs(UniqueID)
SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] WHERE [MyTable].[DateTime] < @ThreeYearsAgo

INSERT INTO [ISArchive].[dbo].[MyTable] (<Fields>)
SELECT (<Fields>)
FROM [ISAdminDB].[dbo].[MyTable] AS a
INNER JOIN @NextIDs AS b ON a.UniqueID = b.UniqueID

DELETE [ISAdminDB].[dbo].[MyTable]
FROM [ISAdminDB].[dbo].[MyTable]
INNER JOIN @NextIDs AS b ON a.UniqueID = b.UniqueID

DELETE FROM @NextIDs

COMMIT TRAN
END

关于SQL 存档脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com