首页 > 解决方案 > 触发器从表中删除行

问题描述

我正在尝试为日志表中的记录超过一定数量的行创建一个触发器,我想开始将它们清除x数量的旧记录并在某个日期之前保留新记录。

当前查询(伪代码):

    declare @date datetime
    SET @date = 'certaindate'

    CREATE TRIGGER PURGE_USERS ON UsersAD FOR DELETE 
    AS DELETE 
    FROM UsersAD WHERE ROWCOUNT(UsersAD) > x and updateDate < @date

    GO
    -- UPDATE: Might have to partition instead of delete.

我假设您明白我的意思,但我既不知道如何创建触发器以开始删除记录,也不知道确定何时删除记录的好方法。

感谢帮助,

谢谢。

标签: sqlsql-server

解决方案


更好的策略可能是对表进行分区。分区优于delete,因为你可以删除一个分区删除一堆记录更有效。

您尤其不想在触发器中执行大量删除操作,因为表可能在插入期间保持锁定状态。您希望插入速度很快。. . 突然之间真的很慢。

通常,分区将用于保存固定时间段的数据。比如说,您可以为每周创建一个单独的分区,并保留最近 100 周的数据。

您可以在文档中了解有关分区的更多信息。


推荐阅读