Jad*_*ias 7 t-sql sql-server sql-server-2005
不是我之前的问题的重复
当表/数据库在Sql Server 2005上有插入/更新/删除时,有没有办法获得最新的日期时间?最好不要创建触发器..
我知道当你需要每行最后一次更新时,你需要触发器.但是当你想要获得整个表的最后一次更新时,我不确定是否需要它们.
小智 14
SELECT t.name,
user_seeks,
user_scans,
user_lookups,
user_updates,
last_user_seek,
last_user_scan,
last_user_lookup,
last_user_update
FROM sys.dm_db_index_usage_stats i
JOIN sys.tables t
ON ( t.object_id = i.object_id )
WHERE database_id = DB_ID()
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以轻松获取上次插入/更新/删除的日期,如下所示:
CREATE FUNCTIOn fn_TablesLastUpdateDate(@Date NVARCHAR(20))
RETURNS @table TABLE(TableName NVARCHAR(40), LastUpdated Datetime)
AS
BEGIN
IF(@Date='') OR (@Date Is Null) OR (@Date='0')
BEGIN
INSERT INTO @table
SELECT TOP 100 PERCENT TABLENAME,LASTUPDATED FROM
(
SELECT B.NAME AS 'TABLENAME', MAX(STATS_DATE (ID,INDID)) AS LASTUPDATED
FROM SYS.SYSINDEXES AS A
INNER JOIN SYS.OBJECTS AS B ON A.ID = B.OBJECT_ID
WHERE B.TYPE = 'U' AND STATS_DATE (ID,INDID) IS NOT NULL
GROUP BY B.NAME
) AS A
ORDER BY LASTUPDATED DESC
END
ELSE
BEGIN
INSERT INTO @table
SELECT TOP 100 PERCENT TABLENAME,LASTUPDATED FROM
(
SELECT B.NAME AS 'TABLENAME', MAX(STATS_DATE (ID,INDID)) AS LASTUPDATED,
CONVERT(VARCHAR, MAX(STATS_DATE (ID,INDID)), 103) as Date
FROM SYS.SYSINDEXES AS A
INNER JOIN SYS.OBJECTS AS B ON A.ID = B.OBJECT_ID
WHERE B.TYPE = 'U' AND STATS_DATE (ID,INDID) IS NOT NULL
GROUP BY B.NAME
) AS A
WHERE Date=@Date
ORDER BY LASTUPDATED DESC
END
RETURN
END
-- SELECT * from fn_TablesLastUpdateDate('06/11/2012')
Run Code Online (Sandbox Code Playgroud)
正如之前的两个答案所示,SQL Server中确实没有内置功能可以满足您的要求.
有大量的动态管理视图可以告诉您一些您感兴趣的点,例如sys.dm_db_index_usage_stats
,它告诉您何时某个索引有最后的搜索或更新.
但是你真的没有任何东西可以用来获取你正在寻找的所有信息 - 你真的必须自己这样做,在你的表中添加例如datetime字段并用触发器填充它们.
对不起,我不能给你任何更好的消息 - 这就是现在的方式.
在SQL Server 2008中,您有其他新功能,可能会满足您的一些要求 - 请查看:
渣