暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SQLSERVER循环脚本

原创 数据库管理员陆美芳 2023-10-24
238

需求描述

经理来找我说:发票查验表[XT_FpRecord]的字段[FpInfo]是记录了每次查验的内容,类型是text,因为存在异常值,已经出现了问题,问我能怎么清理下历史的记录中的字段[FpInfo]的值。

分析过程

1、确认数据量大小
2、检查表索引情况
3、思考解决方案
第一步确认了,表记录数达到64465713,
第二步确认了,表的数据空间:294,663.672 MB
第三步:考虑到几个方案:1)分区;2)把字段置空
经过翻书,咨询朋友,百度了关于SQL server的分区表,发现有点麻烦。另外尝试了update 1万多条记录,执行耗时不久。且经理反复确认,这个字段的值超过3个月是无用的可以清理。最终采纳方案2)把字段置空。故通过下面的while循环代码,分了3次执行【也可以一次性执行,只是想看看耗时所以分批了】,总共耗时约25个小时完成。

while循环【其他语言的for循环】

DECLARE @i INT = 32500001
DECLARE @max INT=47111261
WHILE @i<=@max
BEGIN
UPDATE [dbo].[XT_FpRecord] SET [FpInfo]=’’ WHERE ID=@i;
–PRINT(@i);
–SELECT * FROM [dbo].[XT_FpRecord] WHERE ID=@i;
SET @i=@i+1;
END

日志清理方法

把库的恢复模式改成:简单,执行 收缩文件,选择日志即可

按日期循环删除数据

DECLARE @startdate date = ‘2020-08-30’;
WHILE @startdate <= ‘2021-12-31’
BEGIN
–PRINT @startdate;
– insert into [dbo].calendar values(@startdate);
delete from XT_FpRecord where [CreateTime]<=@startdate;
SET @startdate = DATEADD(DAY, 1, @startdate);
END

最后修改时间:2024-02-02 15:52:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论