如何在Microsoft SQL Server中获取最新更新/插入数据的表?
找出Smartplant Instrumentation数据最后更新/插入的表
你原来的查询没得到正确结果,主要有两个问题:
- 硬编码了架构ID(
SCHEMA_NAME(9)),这只对应ID为9的架构,大概率不是Smartplant Instrumentation数据所在的架构 sys.tables里的modify_date记录的是表结构的修改时间(比如新增字段、修改约束),不是数据插入/更新的时间
要追踪数据层面的操作,得用SQL Server的索引使用统计视图,下面是可行的查询:
SELECT SCHEMA_NAME(t.schema_id) AS 架构名, t.name AS 表名, t.create_date AS 表创建时间, ius.last_user_update AS 最后数据变更时间, ius.last_user_seek AS 最后查询定位时间, ius.last_user_scan AS 最后全表扫描时间 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() -- 限定当前数据库,避免跨库统计干扰 WHERE -- 过滤最近30天有数据变更或查询的表 COALESCE(ius.last_user_update, ius.last_user_seek, ius.last_user_scan) > DATEADD(DAY, -30, CURRENT_TIMESTAMP) ORDER BY COALESCE(ius.last_user_update, ius.last_user_seek) DESC;
关键说明:
last_user_update:记录最后一次对表执行插入、更新、删除操作的时间,这正是你要找的数据更新时间- 如果SQL Server服务重启过,
sys.dm_db_index_usage_stats里的统计数据会被清空;要是需要长期追踪数据变更,得考虑开启变更数据捕获(CDC),或者给关键表加触发器记录操作日志
内容的提问来源于stack exchange,提问作者Amr Gamal
相关产品推荐
相关产品推荐

