Requête pour lister tous les index d’une base SQL Server





11-07-2012, 11:22 AM
Message : #1

Bar-chart_128x128 Requête pour lister tous les index d’une base SQL Server


Comment lister tous les index d’une base SQL Server avec une seule requête? Il peut être très utile d’afficher les index des tables de toute une base en une seule et unique requête sous SQL Server.

Cette requête offre une vue synthétique sur tous les index et donc sur la manière dont est gérée la base de donnée. Elle propose notamment de savoir si la colonne est une clef primaire, si la colonne est unique et si l’index est de type Cluster ou Non (CLUSTERED ou NONCLUSTERED).

Requête qui liste tous les index CLUSTERED ou NONCLUSTERED d'une base de données SQL Server



-- Construction du CTE depuis les tables systèmes
-- On utilise notamment [sys].[indexes], [sys].[columns] et [sys].[tables]
WITH LISTE_INDEXS
AS (
SELECT
sysidxcol.[index_id] + sysidxcol.[object_id] AS [IndexId],
l_t.[name] AS [Table],
sysidx.[name] AS [Index],
li.[name] AS [Column],
sysidx.[type_desc] AS [Description],
sysidx.[is_primary_key] AS [ClefPrimaire],
sysidx.[is_unique] AS [Unique]

FROM [sys].[indexes] sysidx
INNER JOIN [sys].[index_columns] sysidxcol
ON sysidx.[index_id] = sysidxcol.[index_id]
AND sysidx.[object_id] = sysidxcol.[object_id]
INNER JOIN [sys].[columns] li
ON sysidxcol.[column_id] = li.[column_id]
AND sysidx.[object_id] = li.[object_id]
INNER JOIN [sys].[tables] l_t
ON sysidx.[object_id] = l_t.[object_id]
)

-- Sélection des informations
SELECT li.[Table],
li.[Index],
li.[Description],
li.[ClefPrimaire],
li.[Unique],
STUFF((SELECT ',' + a.[Column]
FROM LISTE_INDEXS a
WHERE li.[IndexId] = a.[IndexId]
FOR XML PATH('')), 1, 1, '') AS [Colonnes]
FROM LISTE_INDEXS li
GROUP BY li.[IndexId],
li.[Table],
li.[Index],
li.[Description],
li.[ClefPrimaire],
li.[Unique]
ORDER BY li.[Table] ASC,
li.[ClefPrimaire] DESC
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse


Articles ou discussions similaires
Exécuter une requête SQL SELECT plusieurs fois sur le même CTE
Pivoter des lignes en colonnes avec la requête PIVOT sous SQL Server
Requête obtenir le numéro de version SQL Server exact
SQL Server Lister les tables définis par les utilisateurs ou UDT
Requête SELECT simple sous SQL Server
Requête INSERT OR UPDATE sous SQL SERVER