在SQL中定期删除行

时间:2010-11-04 19:37:33

标签: sql sql-server sql-server-2005 tsql

我有一个审计表设置,它基本上反映了我的一个表以及日期,用户和命令类型。这是它的样子:

AuditID      UserID Individual    modtype   user  audit_performed
1           1239      Day Meff      INSERT    dbo   2010-11-04 14:50:56.357
2           2334      Dasdf fdlla   INSERT    dbo   2010-11-04 14:51:07.980
3           3324      Dasdf fdla    DELETE    dbo   2010-11-04 14:51:11.130
4           5009      Day Meffasdf  UPDATE    dbo   2010-11-04 14:51:12.777

由于这些类型的表可以很快变大 - 我正在考虑对某些旧行进行某种自动删除。所以,例如,如果我有3个月的历史 - 如果我可以删除第一个月同时保留最后两个月。所有这一切都必须是自动的 - 我想一旦某个日期被点击,查询就会激活并删除带有审计数据的最早月份。这样做的最佳方式是什么?

顺便说一句,我正在使用SQL Server 2005。

4 个答案:

答案 0 :(得分:5)

这里的SQL代理作业应该没问题。您绝对不需要在每个带触发器的插件上执行此操作。我怀疑你甚至需要每天都这样做。您可以安排一个月运行一次的工作,并清除超过2个月的任何事情(因此,在任何给定时间,您最多有3个月的数据减去1天)。

答案 1 :(得分:4)

您可以使用SQL Server agent ..您可以安排重复的工作,例如在一段时间后删除当前审核表中的条目。 Here就是这样做的。

我建议将数据存储在另一个表audit_archive表中,并将其从当前审计表中删除。所以,如果你想要一些历史,你仍然拥有它,你的桌子也不会太大。

答案 2 :(得分:3)

每次添加行时都可以尝试触发,它会清除超过3个月的任何内容。

您也可以尝试SQL Agent每天运行一个脚本来执行此操作。

答案 3 :(得分:0)

你看过使用触发器了吗?您可以定义一个触发器,以便在添加行(在INSERT上)时删除任何超过三个月的行。