正确查询以拉出SQL服务器上表的最后修改时间?

时间:2015-02-26 22:48:11

标签: c# sql asp.net .net sql-server

我的目标是在SQL服务器(MS SQL SERVER 2008 R2)中提取表的最后修改日期和时间,当我说上次修改日期和时间时,我特别指的是该表记录值的更改。例如,增值,删除或更新。不是表格的结构变化等变化。

假设我的数据库名称是MyDB。 假设我的表名是MyTable。

所以我使用了以下查询,每当我更改表中记录的值时它都能正常工作,并反映了更改的正确时间:

SELECT last_user_update from sys.dm_db_index_usage_stats where database_id = DB_ID('MyDB') and object_id = object_id('MyDB.dbo.Mytable')

我现在的问题 - 此查询是否是达到目标的正确方法?因为我通过跟踪和错误得出了这个查询,所以我需要一些确认。此外,此查询是否也反映了表格的其他更改,例如结构更改?如果是这样,是否有更好的查询更清晰,只反映表中的值变化?

1 个答案:

答案 0 :(得分:0)

MSDN状态:user_updates计数器指示由基础表或视图上的插入,更新或删除操作引起的索引维护级别。

https://msdn.microsoft.com/en-us/library/ms188755.aspx

所以它可能还可以。

但是,您可以在DB上放置一个LastModifiedDateTime字段并在操作期间设置它,然后为此选择MAX值。

编辑:根据评论:

CREATE TRIGGER LastUpdateTrigger 
ON sourceTable 
AFTER INSERT, UPDATE, DELETE 
AS  
    IF NOT EXISTS(SELECT * FROM destTable WHERE TableName = 'sourceTable') 
    BEGIN
        INSERT INTO destTable (LastUpdateDateTime, TableName) 
        VALUES (GETDATE(), 'sourceTable')
    END
    ELSE
    BEGIN
        UPDATE destTable SET LastUpdateDateTime = GETDATE()
        WHERE Tablename = 'sourceTable'
    END

还将表名放在destTable中以跟踪同一数据库中表的更新。