如何在Microsoft SQL Server中查询近24小时数据被修改的表?
如何查询SQL Server中近24小时被修改的数据表(无手动更新时间记录)
可以通过SQL Server内置的动态管理视图(DMV)实现,无需手动维护更新时间字段。SQL Server会自动跟踪表的修改操作统计,以下是具体方案:
核心查询语句
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, COALESCE(MAX(ius.last_user_update), MAX(ps.last_modified_date)) AS LastModifiedTime FROM sys.tables t LEFT JOIN sys.dm_db_index_usage_stats ius ON t.object_id = ius.object_id AND ius.database_id = DB_ID() LEFT JOIN sys.dm_db_partition_stats ps ON t.object_id = ps.object_id AND ps.index_id IN (0, 1) -- 堆表(0)或聚集索引表(1) WHERE (ius.last_user_update >= DATEADD(HOUR, -24, GETDATE()) OR ps.last_modified_date >= DATEADD(HOUR, -24, GETDATE())) GROUP BY SCHEMA_NAME(t.schema_id), t.name ORDER BY LastModifiedTime DESC;
关键说明
- sys.dm_db_index_usage_stats:记录表上索引的用户操作时间(INSERT/UPDATE/DELETE),适用于带索引的表。但SQL Server服务重启后,该视图的数据会被重置。
- sys.dm_db_partition_stats:针对堆表(无聚集索引)或聚集索引表,
last_modified_date字段会记录最后一次数据修改的时间,弥补堆表在sys.dm_db_index_usage_stats中无记录的问题。 - 局限性:如果服务刚重启,之前的修改统计会丢失;只读数据库不会更新这些统计信息;系统表的修改默认不包含在结果中,如需查询可调整
sys.tables的过滤条件。
内容的提问来源于stack exchange,提问作者M.K. Safi
相关产品推荐
相关产品推荐

