Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定期删除TSQL中的行_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

定期删除TSQL中的行

定期删除TSQL中的行,sql,sql-server,sql-server-2005,tsql,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 1

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

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。

您可以在每次添加行时尝试触发器,它将清除任何超过3个月的内容


您也可以尝试SQL代理每天运行一个脚本来实现这一点。

您看过使用触发器吗?您可以定义在添加(插入时)删除任何超过三个月的行时运行的触发器。

您可以使用..您可以安排重复作业,例如在特定时间后从当前审核表中删除条目。就是你会怎么做


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

在这里,SQL代理作业应该可以。你绝对不需要在每一次插入时都使用触发器。我怀疑你是否需要每天都这么做。您可以安排一个每月运行一次的作业,并清除超过2个月的任何内容(因此,在任何给定时间,最多有3个月的数据减去1天)。

+1用于SQL代理作业。我绝对不会为此使用触发器(但我不会给出-1:)。事实上,触发器可能会太频繁地触发。另一种选择是使用外部程序来运行查询。可能是Windows任务调度程序触发的。这一切都取决于您对服务器的访问权限。如果您使用触发器执行此操作,则每次插入都会/可能会增加大量开销。这是一个危险的想法。触发器很难调试,如果不加以保护,可能会造成严重破坏。我会避免在审计中创建触发器来删除旧条目。这只会给你带来一张痛苦世界的头等舱票——特别是当你首先使用触发器创建审计条目时。最好的选择是在审核表上没有或几乎没有活动的时候安排每日SQL代理作业。哦,在一个不会影响您的备份和维护计划的时刻。