sql-server - 我可以从 SQL Server 读取元数据以了解最后更改的行/表吗?

标签 sql-server sql-server-2005 sql-server-2008

我们有一个包含数百表的数据库。

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/

相关文章:

sql-server - 为什么使用 SQL Server 镜像和自动故障转移时不支持 MSDTC?

SQL - 在生产环境中运行 RECONFIGURE 是危险的

sql-server-2005 - 如何将大字符串数据存储到SQL Server 2005数据库中?

sql-server-2005 - Delphi 应用程序使用 COMMIT 和 ROLLBACK 进行多个 SQL 更新

sql - sp_MSforeachtable 在每个表上执行过程

sql - 归档大表 (SQL Server 2008)

sql - 使用字符串变量对表的每一行执行存储过程

sql-server - 用于存储最大 99.99 的简单数字的最佳数据类型是什么

sql-server - 向 SQL Server 2005 中的应用程序角色授予权限

c# - 为什么我的 SqlConnection 在关闭后仍保留在 SSMS 进程列表中?