Section courante

A propos

Section administrative du site

Afficher tous les index dans une base de données SQL Server

Le SQL Server ne propose pas dans une seule table les informations sur les index de tables. Pour se faire, vous devez combinés plusieurs tables pour obtenir le résultat souhaité.

Voici une requête SQL permettant d'afficher tous les index contenu dans la base de données courante :

  1. SELECT i.[name] as NomIndex,
  2.     SubString(column_names, 1, len(column_names)-1) as [Colonne],
  3.     CASE 
  4.      WHEN i.[type] = 1 THEN 'Unite d''allocation d''index'
  5.          WHEN i.[type] = 2 THEN 'Sans unite d''allocation unique d''index'
  6.          WHEN i.[type] = 3 THEN 'Index XML'
  7.          WHEN i.[type] = 4 THEN 'Index Spatial'
  8.          WHEN i.[type] = 5 THEN 'Index d''Unite d''allocation columnstore'
  9.          WHEN i.[type] = 6 THEN 'Sans unite d''allocation columnstore index'
  10.          WHEN i.[type] = 7 THEN 'Sans unite d''allocation d''index hache'
  11.     END AS TypeIndex,
  12.     CASE WHEN i.is_unique = 1 THEN 'Unique'
  13.          ELSE 'Pas unique' END AS [Unique],
  14.     schema_name(t.schema_id) + '.' + t.[name] AS VueDeTable, 
  15.     CASE 
  16.      WHEN t.[type] = 'U' THEN 'Table'
  17.          WHEN t.[type] = 'V' THEN 'Vue'
  18.     END AS [TypeObject]
  19. FROM sys.objects t
  20. INNER JOIN sys.indexes i ON t.object_id = i.object_id
  21. CROSS APPLY (SELECT col.[name] + ', ' FROM sys.index_columns ic
  22.    INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
  23.        WHERE ic.object_id = t.object_id AND ic.index_id = i.index_id
  24.        ORDER BY key_ordinal FOR XML PATH ('') ) D (column_names)
  25. WHERE t.is_ms_shipped <> 1 AND index_id > 0
  26. ORDER BY i.[name]

on obtiendra un résultat ressemblant a ceci :

Voir également

Référence des opérations

Dernière mise à jour : Vendredi, le 9 octobre 2020