Mat*_*hew 2 trigger sql-server-2008-r2
我有一个用于存储事件的 SQL Server 表。
我只希望表包含最近添加的 1000 行,当插入第 1001 行时,应删除第 1 行。
我有一个 DateCreatedUTC 列和一个自动编号列......我可以编写一个查询来执行删除并触发它,INSERT
但我不知道这是最合适的解决方案。
您可以创建一个视图以在其余行确实存在时隐藏它们:
CREATE VIEW dbo.Top1000Rows
AS
SELECT TOP (1000) ...columns...
FROM dbo.table_name
ORDER BY DateCreatedUTC DESC;
GO
Run Code Online (Sandbox Code Playgroud)
然后在后台作业中定期运行它(只需使用频率,直到您对表本身“关闭”的频率和数量感到满意为止):
;WITH x AS
(
SELECT pk_column,
rn = ROW_NUMBER() OVER (ORDER BY DateCreatedUTC DESC)
FROM dbo.table_name
)
DELETE x WHERE rn > 1000;
Run Code Online (Sandbox Code Playgroud)
如果它不必一直都是 1,000 行,那么您可能会完全忘记视图,因为知道有时会超过 1,000 行。