使用while循环清除数据。

模样

我有一个数据库,每天都会填充增量数据,然后在每个月末将该月数据的完整下载放入系统中。我们的业务希望每天将其放入系统中,然后在月底删除日常工作,并保留整月的数据。我已在下面编写了该查询,如果您能提供帮助,我们将不胜感激。

DECLARE @looper INT
DECLARE @totalindex int;

select  name, (substring(name,17,8)) as Attempt, substring(name,17,4) as [year], substring(name,21,2) as [month], create_date
into #work_to_do_for
from sys.databases d
where name like 'Snapshot%' and 
d.database_id >4 and
(substring(name,21,2) = DATEPART(m, DATEADD(m, -1, getdate()))) AND (substring(name,17,4) = DATEPART(yyyy, DATEADD(m, -1, getdate()))) 

order by d.create_date  asc


SELECT @totalindex = COUNT(*) from #work_to_do_for

SET @looper = 1 -- reset and reuse counter
WHILE (@looper < @totalindex)
    BEGIN;

set @looper=@looper+1
    END;

    DROP TABLE #work_to_do_for;

我需要在几个表上执行清除。

提前致谢。

w

当我删除大量记录时,我总是按批次和下班时间进行记录,以免在生产过程中浪费资源。为此,您需要合并一个循环和一些测试以找到一次要删除的最佳数字。

begin transaction del -- I always use transactions as a safeguard
declare @count int = 1

while @count > 0
    begin
    delete top (100000) t
    from dbo.MyTable t -- JOIN if necessary
    -- WHERE if necessary

    set @count = @@ROWCOUNT
end

手动(无WHILE循环)运行此命令1次,并在括号中记录100000条记录,然后查看执行时间。写下来。再次运行200000条记录。检查时间;写下来。用500000条记录运行它。您正在寻找执行时间的趋势。只要随着增加批大小而删除100000条记录所需的时间在减少,请继续增加它。您可能以500k结尾,但是此方法将帮助您找到每个批次要删除的最佳数目。然后,将其作为循环运行。

话虽这么说,但是如果您实际上要删除数百万条记录,那么在不干扰其他进程的情况下,删除并重新创建表可能更有意义。如果需要保存一些数据,则可以将所需的内容插入到新表(例如MyTable_New)中,删除原始表(MyTable),然后将MyTable_New重命名为MyTable。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章