我是否可以从SQL Server读取元数据以了解最后更改的行/表?

时间:2010-03-11 09:45:34

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

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

在SQL Server中是否存在某种数据源,我可以以编程方式查询以获取上次更改表的名称和行?

或者我们是否需要使用名为 LastChangedDateTime 等的每个表中的字段来实现我们自己

3 个答案:

答案 0 :(得分:3)

在找出最后一个表进行修改的时候,有一种偷偷摸摸的方法可以用来访问这些信息,但它不会告诉你哪一行被改变了,只是在什么时候。 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特定的更改数据捕获功能。

答案 1 :(得分:1)

[sys].[tables]视图将告诉您表创建和上次修改的时间(根据模式,不是插入,更新或删除)。据我所知,没有关于数据库中每条记录的最后修改的内置信息(无论如何它会占用大量空间,所以没有它可能很好)。因此,您应该自己添加最后修改的字段,并且可以通过触发器自动更新。

答案 2 :(得分:0)

相关问题