首页 新闻 赞助 找找看

sqlserver写一个存储过程删除所有表中指定日期之前的历史数据

0
悬赏园豆:30 [已解决问题] 解决于 2020-09-28 16:49

不是指作业、定时删除的那种,就是一个存储过程,删除所有表中指定日期之前的历史数据。比如指定一个日期2019.12.31 ,那么数据库中在此之前的数据都会消失。大神们帮帮忙

夕阳下的你我的主页 夕阳下的你我 | 初学一级 | 园豆:4
提问于:2020-09-23 14:29
< >
分享
最佳答案
0

给你大致的代码

select 'delete from '+name+'where datetime < ''20200923'' ;' from sys.objects where type = 'U'
这样可以把 删除的sql语句 批量拼接出来,
当然 因为写在存储过程里 datetime 这个字段你可以处理一下,时间也可以做成参数处理一下,
然后 exec整段字符串

收获园豆:28
Benjamin杰明 | 菜鸟二级 |园豆:263 | 2020-09-23 17:56

谢谢啦,感谢,我试试

夕阳下的你我 | 园豆:4 (初学一级) | 2020-09-24 14:35
其他回答(2)
0

所有表都有时间列吗?

Jonny-Xhl | 园豆:691 (小虾三级) | 2020-09-23 14:50

有些表有,但是有些表没有,sqlserver有没有那种系统自己记录表信息的时间记录hhhh[手动狗头]

支持(0) 反对(0) 夕阳下的你我 | 园豆:4 (初学一级) | 2020-09-23 14:51

@夕阳下的你我: 没这么玩过,我想这样操作是不安全的

支持(0) 反对(0) Jonny-Xhl | 园豆:691 (小虾三级) | 2020-09-23 14:55

@Jonny-Xhl: 唉,你说的对

支持(0) 反对(0) 夕阳下的你我 | 园豆:4 (初学一级) | 2020-09-23 14:59
0

这个需求描述有问题,所有表包含系统运行的字典表和业务表。业务表一般来说是有时间字段。字典表肯定不能删除。
一般不建议直接删记录,可以把这些记录挪到备份数据库中。

收获园豆:2
邀月 | 园豆:25475 (高人七级) | 2020-09-23 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册