Get auto generated index stats

-- use [Database Name]
go
;with cte as
(
SELECT 
      SCHEMA_NAME(o.schema_id) [schema_name],
	  o.schema_id,
      OBJECT_NAME(S.[OBJECT_ID]) [object_name], 
	  S.Name [stat_name], 
	  o.create_date,
      [stats_columns] = COALESCE((STUFF((SELECT CAST(',' + COL_NAME(object_id, column_id) AS varchar(max))
				  FROM sys.stats_columns
				  WHERE (object_id = s.object_id AND stats_id = s.stats_id)
				  ORDER BY object_id, stats_id
				  FOR xml PATH ('')), 1, 1, '')), ''),
	  s.*
FROM sys.Stats s
inner join sys.objects o on o.object_id = s.object_id
WHERE 1=1
and o.is_ms_shipped = 0
and OBJECTPROPERTY(s.object_id, 'ismsshipped') = 0
and auto_created = 1
and o.create_date < GETDATE() - 90
)
select *,
'DROP STATISTICS [' + cte.[SCHEMA_NAME] + '].[' + cte.[OBJECT_NAME] + '].[' + cte.[stat_name] + ']'  drop_stmt,
'CREATE STATISTICS [' + cte.[stat_name] + '] ON [' + cte.[SCHEMA_NAME] + '].[' + cte.[OBJECT_NAME] + '] (' + cte.[stats_columns] + ')' create_stm
from cte;

No comments:

Post a Comment

Truncating very large transaction log in full recovery mode

While I always configure transaction log backups for every database in non-simple recovery model, and to compliment it I also have monitorin...