A postagem de Piotr Kononow Listar todos os índices no banco de dados SQL Server contém um exemplo de consulta SQL para listar todos os índices em um banco de dados SQL Server. E confirmamos em testes que o exemplo realmente funciona.
Para entender completamente a consulta, temos uma pergunta relacionada à cross apply
seção abaixo. Consulte também a consulta completa incluída nos detalhes no final.
cross apply (
...
) D (column_names)
Nossa pergunta:
O que significa o D
e D (column_names)
?
Agradecemos muito quaisquer dicas e sugestões.
Detalhes: o exemplo completo de consulta SQL:
--Reference:
-- https://dataedo.com/kb/query/sql-server/list-all-indexes-in-the-database
select
i.[name] as [index_name]
, substring(column_names, 1, len(column_names)-1) as [columns]
, case
when i.[type] = 1 then 'Clustered index'
when i.[type] = 2 then 'Nonclustered unique index'
when i.[type] = 3 then 'XML index'
when i.[type] = 4 then 'Spatial index'
when i.[type] = 5 then 'Clustered columnstore index'
when i.[type] = 6 then 'Nonclustered columnstore index'
when i.[type] = 7 then 'Nonclustered hash index'
else 'ERROR'
end as [index_type]
, case
when i.is_unique = 1 then 'Unique'
else 'Not unique'
end as [unique]
, '['+schema_name(t.schema_id)+'].['+t.[name]+']' as [table_view]
, case
when t.[type] = 'U' then 'Table'
when t.[type] = 'V' then 'View'
end as [object_type]
from
sys.objects t
inner join sys.indexes i
on t.object_id = i.object_id
cross apply (
select
col.[name]+', '
from
sys.index_columns ic
inner join sys.columns col
on ic.object_id = col.object_id and ic.column_id = col.column_id
where
ic.object_id = t.object_id
and ic.index_id = i.index_id
order by key_ordinal
for xml path ('')
) D (column_names)
where
t.is_ms_shipped <> 1
and index_id > 0
order by i.[name]
;
D
representa como um alias de tabela enquantocolumn_names
é para alias de coluna paracol.[name]+', '
.O
column_names
foi usado na lista SELECT:substring(column_names, 1, len(column_names)-1) as [columns]
Para saber mais sobre o operador apply, recomendo ler estes links: link 1 e link 2 .