查找上次更新时间表

Ram*_*rai 23 sql-server-2008-r2

我想检索上次更新表(插入,删除,更新).

我试过这个查询.

SELECT last_user_update
FROM sys.dm_db_index_usage_stats
WHERE object_id=object_id('T')
Run Code Online (Sandbox Code Playgroud)

但是服务重启后数据不会持续存在.

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

mar*_*c_s 51

如果您在谈论上次更新表的结构已更改(添加了新列,列更改等) - 请使用此查询:

SELECT name, [modify_date] FROM sys.tables
Run Code Online (Sandbox Code Playgroud)

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

  • @RameshDurai:您在谈论哪种解决方案?sys.tables在所有版本的SQL Server中都存在。但是CDC(更改数据捕获)可能是仅限企业版的功能,这是事实 (2认同)
  • 对于非默认模式`SELECT s.name [schema], t.name [table], t.modify_date FROM sys.tables t INNER JOIN sys.schemas s ON s.schema_id = t.schema_id` (2认同)

Aya*_*ifa 10

查找表上的最后更新时间

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()
Run Code Online (Sandbox Code Playgroud)

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


MER*_*ĞAN 9

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

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')
Run Code Online (Sandbox Code Playgroud)

  • 如果重新启动服务,此解决方案不起作用. (12认同)
  • 这正是OP试图避免的. (4认同)