Se eu executar esta consulta em nosso sistema:
SELECT STATS_DATE(t.object_id, s.stats_id) AS stdate, *
from sys.stats s WITH (NOLOCK)
INNER JOIN sys.tables t WITH (NOLOCK) ON t.object_id = s.object_id
WHERE t.name LIKE 'mytable%'
Às vezes vejo que a stats_date
função retorna NULL. Isso não deve ser possível de acordo com o BOL, exceto se houver um erro. Não informa qual erro.
A tabela é bem grande, 11 bilhões de linhas. Se eu correr:
UPDATE STATISTICS fct.mytable ( pk_mytable)
o stats_date
retorna novamente como não nulo.
Por que a data é nula e como posso evitar isso?
Apenas as estatísticas da chave primária são NULL.
Se eu correr:
DBCC SHOW_STATISTICS ('fct.MyTable', 'IX_MyTableID')
ele volta com os 3 conjuntos de resultados que eu esperava. Se eu correr:
DBCC SHOW_STATISTICS ('fct.MyTable', 'PK_MyTable')
Ele retorna:
Por MSDN , ele pode retornar nulo em caso de erro, embora não tenha certeza de por que você teria um erro com isso. Você já pensou em fazer uma aplicação externa à função sys.dm_db_stats_properties para ver se obtém os mesmos resultados?