Pregunta

Quiero comprobar en Transact SQL si una columna específica de una tabla tiene estadísticas y, de ser así, obtenerlas todas.

¿Fue útil?

Solución

Esta consulta debería hacerlo.
Lo uso en un proceso almacenado que navega por la base de datos para encontrar estadísticas.
Funciona en SQL Server 2005 y probablemente también en una versión anterior.

SELECT S.NAME
FROM   SYS.OBJECTS AS O
       INNER JOIN SYS.STATS AS S
         ON O.OBJECT_ID = S.OBJECT_ID
       INNER JOIN SYS.STATS_COLUMNS AS SC
         ON SC.OBJECT_ID = S.OBJECT_ID
            AND S.STATS_ID = SC.STATS_ID
WHERE  (O.OBJECT_ID = OBJECT_ID('MyTable','local'))
       AND (O.TYPE IN ('U'))
       AND (INDEXPROPERTY(S.OBJECT_ID,S.NAME,'IsStatistics') = 1)  /* only stats */
       AND (COL_NAME(SC.OBJECT_ID,SC.COLUMN_ID) = 'MyColumn')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top