我们有一个包含数百表的数据库。
SQL Server 中是否有某种元 数据源,我可以以编程方式 查询以获取最后更改 表的名称以及排?
或者我们是否需要自己在每个表中使用名为LastChangedDateTime等的字段来实现?
最佳答案
就查明表最后一次修改的时间而言,有一种偷偷摸摸的方法可以访问此信息,但它不会告诉您哪一行被更改,只是何时更改。 SQL Server 维护索引使用统计信息,并记录索引的最后一次搜索/扫描/查找和更新。它还按用户/系统拆分。
仅过滤用户表,任何插入/更新/删除都会导致索引发生更新,并且 DMV 将使用此新信息进行更新。
select o.name,
max(u.last_user_seek) as LastSeek,
max(u.last_user_scan) as LastScan,
max(u.last_user_lookup) as LastLookup,
max(u.last_user_update) as LastUpdate
from sys.dm_db_index_usage_stats u
inner join sys.objects o on o.object_id = u.object_id
where o.type = 'U' and o.type_desc = 'USER_TABLE'
group by o.name
但这并不理想,堆没有索引作为开始 - 我从未考虑将它用于生产代码作为跟踪机制,只是作为检查明显更改的取证工具。
如果您想要正确的行级变更跟踪,您要么必须内置它,要么查看 SQL 2008 特定的变更数据捕获功能。
关于sql-server - 我可以从 SQL Server 读取元数据以了解最后更改的行/表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2423909/