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