首页 > 解决方案 > SQL Server 代理在午夜删除记录

问题描述

我对 SQL 有点陌生,所以如果这个问题不是很清楚,我提前道歉。我想在 SQL Server 代理中创建一个作业,在 24 小时后删除一行。我的问题是 SQL Server 代理在午夜而不是 24 小时后删除记录,例如,如果我在下午 3 点创建记录,则将在上午 12 点而不是第二天下午 3 点删除记录。

有什么可以解决这个问题的。

谢谢您的帮助

标签: sqlsql-serversql-server-2017sql-server-agent

解决方案


不要采取这种方法!使用视图,然后让作业清理。

-- Have an expiration column in the table
create table t (
    . . .
    expire_datetime datetime
);

-- Filter out the unexpired rows for the view
create view v_t as
    select t.*
    from t
    where expire_datetime > getdate();

您可以expire_datetime在创建记录时进行设置。或者,如果您愿意,也可以是创建日期时间加上 24 小时:

alter table t add expire_datetime as (dateadd(hour, 24, createdAt));

通过视图进行所有访问。然后,您可以定期运行作业以删除过期记录。你可以每天一次、每小时一次、每周一次——无论何时。


推荐阅读