繁体   English   中英

如何自动删除sql服务器数据库中的旧记录?

[英]How to automatically delete old records from sql server database?

我正在 as.net 中创建一个 web 应用程序,并在数据库中创建了一个表来插入通知。 我想知道是否有任何方法可以自动删除该表中超过 30 天的数据。 有什么办法可以做到这一点?

我想知道有没有办法自动

SQL 用于计划任务(也称为作业)的服务器内置工具是 SQL 服务器代理。

https://learn.microsoft.com/en-us/sql/ssms/agent/sql-server-agent

您可以创建一个运行 DELETE 查询的 JOB

请注意,在大多数情况下,我强烈建议不要从数据库中删除数据。 磁盘很便宜,你永远不知道什么时候需要历史信息。 但更重要的是,在大多数情况下你不应该有这样做的理由。 在大系统中,您使用分区,您也可以将旧数据存储在单独的文件中,无需每次都备份该文件。 在小型系统中,如果需要,您可以简单地购买另一个便宜的 HDD 磁盘。 如果需要,您应该设计系统以将行标记为逻辑删除(例如添加另一列),而不是删除行

更新:如果我们使用 SQL Server Express 怎么办???

SQL Server express 不支持使用SQL Server Agent,这意味着我们需要不同的方案来调度任务,常见的方案有:

解决方案 1:使用外部调度程序

缺点:此解决方案是在操作系统级别

如果你在windows上使用SQL服务器,那么你可以Windows Task Scheduler :开始菜单->搜索"Task Scheduler" ->右击"Task Scheduler"和select "Create Basic Task" ->填写任务信息->选择"Start a Program"作为操作类型并执行".bat"文件,其中包含执行查询的sqlcmd命令

如果您使用的是 Linux,那么您可以使用 Cron 守护进程 - 一个在 memory 后台运行的系统管理的可执行文件,用户可以使用它来安排任务。

解决方案2:使用SQL Server SERVICE(服务代理)安排任务; 对话计时器; 信息; 合同; 队列

请注意,这是我的首选选项,即使出于多种原因支持代理,我也会使用它,服务代理非常可靠,它是 SQL 引擎的一部分。 几乎没有开销,它允许在任何时间间隔异步和定时(重复)执行。 话虽如此,它无法像 SQL Agent 那样访问操作系统。

您可以在这篇文章中获得包括实施此解决方案的所有代码在内的完整示例: https://www.sqlteam.com/articles/scheduling-jobs-in-sql-server-express-2

  1. 使用 T-SQL 构建一个存储过程,删除您超过 30 天的旧数据。
  2. 将程序分配给 SQL 服务器代理。
  3. 每天在特定时间运行服务器代理。

这样,您的程序将每天运行,并根据您编写的程序删除超过 30 天的旧数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM