40

我想检索上次更新表的时间(插入、删除、更新)。

我试过这个查询。

SELECT last_user_update
FROM sys.dm_db_index_usage_stats
WHERE object_id=object_id('T')

但是那里的数据不会在服务重新启动时保留下来。

即使服务重新启动,我也想保留统计信息。我怎样才能实现它?

4

7 回答 7

80

如果您说的是上次更新表时的结构已更改(添加了新列、更改了列等) - 使用此查询:

SELECT name, [modify_date] FROM sys.tables

如果您正在谈论 DML 操作(插入、更新、删除),那么您需要保留 DMV 定期为您提供的内容,或者您​​需要在所有表上创建触发器以记录“最后修改”日期 -或查看SQL Server 2008 及更高版本中的更改数据捕获等功能。

于 2013-07-05T12:58:13.557 回答
20

如果您想查看数据更新,您可以使用具有所需权限的此技术:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'DATABASE')
AND OBJECT_ID=OBJECT_ID('TABLE')
于 2014-11-03T11:41:45.487 回答
15

查找表的最后更新时间

SELECT
tbl.name
,ius.last_user_update
,ius.user_updates
,ius.last_user_seek
,ius.last_user_scan
,ius.last_user_lookup
,ius.user_seeks
,ius.user_scans
,ius.user_lookups
FROM
sys.dm_db_index_usage_stats ius INNER JOIN
sys.tables tbl ON (tbl.OBJECT_ID = ius.OBJECT_ID)
WHERE ius.database_id = DB_ID()

http://www.sqlserver-dba.com/2012/10/sql-server-find-last-time-of-update-on-a-table.html

于 2018-04-23T10:01:23.480 回答
4

要保留有关数据修改的审计数据,您需要在您感兴趣的每个表上实现一个 DML 触发器。您需要创建一个审计表,并将代码添加到触发器以写入该表。

有关如何实现 DML 触发器的更多详细信息,请参阅这篇 MDSN 文章http://msdn.microsoft.com/en-us/library/ms191524%28v=sql.105%29.aspx

于 2013-07-05T13:19:47.547 回答
2
SELECT so.name,so.modify_date

FROM sys.objects as so

INNER JOIN INFORMATION_SCHEMA.TABLES as ist

ON ist.TABLE_NAME=so.name where ist.TABLE_TYPE='BASE TABLE' AND 

TABLE_CATALOG='DbName' order by so.modify_date desc;

这有助于使用表名修改表

于 2017-01-30T12:30:44.447 回答
-1
SELECT UPDATE_TIME
FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_dbname' AND TABLE_NAME = 'your_tablename'
于 2021-12-13T07:12:06.517 回答
-2

为什么不直接运行:不需要特殊权限

SELECT
    name, 
    object_id, 
    create_date, 
    modify_date
FROM
    sys.tables 
WHERE 
    name like '%yourTablePattern%'
ORDER BY
    modify_date
于 2019-07-11T20:52:23.230 回答