view_Stats_Last_Update.sql 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. -- 04/01/2012 Pedro Lopes (Microsoft) [email protected] (http://aka.ms/sqlinsights/)
  2. --
  3. -- Checks for statistics last update date in the current database.
  4. --
  5. -- 11/02/2016 Fixed rows col when sys.dm_db_stats_properties returns null
  6. --
  7. DECLARE @sqlcmd NVARCHAR(4000), @sqlmajorver int, @sqlminorver int, @sqlbuild int
  8. SELECT @sqlmajorver = CONVERT(int, (@@microsoftversion / 0x1000000) & 0xff);
  9. SELECT @sqlminorver = CONVERT(int, (@@microsoftversion / 0x10000) & 0xff);
  10. SELECT @sqlbuild = CONVERT(int, @@microsoftversion & 0xffff);
  11. IF (@sqlmajorver = 10 AND @sqlminorver = 50 AND @sqlbuild >= 4000) OR (@sqlmajorver = 11 AND @sqlbuild >= 3000) OR @sqlmajorver > 11
  12. BEGIN
  13. SET @sqlcmd = 'USE ' + QUOTENAME(DB_NAME()) + ';
  14. SELECT DISTINCT ''' + CONVERT(VARCHAR(12),DB_ID()) + ''' AS [databaseID], mst.[object_id] AS objectID, ss.[stats_id], ''' + DB_NAME() + ''' AS [DatabaseName], t.name AS schemaName, OBJECT_NAME(mst.[object_id]) AS tableName, ss.name AS [stat_name], ISNULL(sp.[rows],SUM(p.[rows])) AS [rows], sp.modification_counter, STATS_DATE(o.[object_id], ss.[stats_id]) AS [stats_date]
  15. FROM sys.stats AS ss
  16. INNER JOIN sys.objects AS o ON o.[object_id] = ss.[object_id]
  17. INNER JOIN sys.tables AS mst ON mst.[object_id] = o.[object_id]
  18. INNER JOIN sys.schemas AS t ON t.[schema_id] = mst.[schema_id]
  19. INNER JOIN sys.partitions AS p ON p.[object_id] = ss.[object_id]
  20. CROSS APPLY sys.dm_db_stats_properties(ss.[object_id], ss.[stats_id]) AS sp
  21. GROUP BY o.[object_id], mst.[object_id], t.name, ss.stats_id, ss.name, sp.[rows], sp.modification_counter
  22. ORDER BY t.name, OBJECT_NAME(mst.[object_id]), ss.name'
  23. END
  24. ELSE
  25. BEGIN
  26. SET @sqlcmd = 'USE ' + QUOTENAME(DB_NAME()) + ';
  27. SELECT DISTINCT ''' + CONVERT(VARCHAR(12),DB_ID()) + ''' AS [databaseID], mst.[object_id] AS objectID, ss.[stats_id], ''' + DB_NAME() + ''' AS [DatabaseName], t.name AS schemaName, OBJECT_NAME(mst.[object_id]) AS tableName, ss.name AS [stat_name], SUM(p.[rows]) AS [rows], rowmodctr AS modification_counter, STATS_DATE(o.[object_id], ss.[stats_id]) AS [stats_date]
  28. FROM sys.stats AS ss
  29. INNER JOIN sys.sysindexes AS si ON si.id = ss.[object_id]
  30. INNER JOIN sys.objects AS o ON o.[object_id] = si.id
  31. INNER JOIN sys.tables AS mst ON mst.[object_id] = o.[object_id]
  32. INNER JOIN sys.schemas AS t ON t.[schema_id] = mst.[schema_id]
  33. INNER JOIN sys.partitions AS p ON p.[object_id] = ss.[object_id]
  34. LEFT JOIN sys.indexes i ON si.id = i.[object_id] AND si.indid = i.index_id
  35. WHERE o.type <> ''S'' AND i.name IS NOT NULL
  36. GROUP BY o.[object_id], mst.[object_id], t.name, rowmodctr, ss.stats_id, ss.name
  37. ORDER BY t.name, OBJECT_NAME(mst.[object_id]), ss.name'
  38. END
  39. EXECUTE sp_executesql @sqlcmd