web-dev-qa-db-fra.com

Lister tous les index avec les colonnes incluses (singes)

J'avais essayé sp_helpindex mais il montre les colonnes qui ont un index et non les colonnes incluses. S'il vous plaît dites-moi comment répertorier tous les index avec des colonnes incluses (nonkeys)?

16
Prakash

Essayez cette requête T-SQL sur les vues de catalogue:

SELECT 
    IndexName = i.Name,
    ColName = c.Name
FROM 
    sys.indexes i
INNER JOIN 
    sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN 
    sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE
    ic.is_included_column = 1
ORDER BY 
    i.Name

En gros, il vérifie tous les index (sys.indexes), puis établit un lien vers leurs colonnes et vérifie quelles colonnes sont conçues comme colonnes incluses (ic.is_included_column = 1), puis répertorie tous ces index et toutes ces colonnes.

25
marc_s

Copié depuis http://www.midnightdba.com/Jen/2009/12/get-index-included-column-info/

SELECT 
 OBJECT_NAME(i.[object_id]) TableName ,
 i.[name] IndexName ,
 c.[name] ColumnName ,
 ic.is_included_column ,
 i.index_id ,
 i.type_desc ,
 i.is_unique ,
 i.data_space_id ,
 i.ignore_dup_key ,
 i.is_primary_key ,
 i.is_unique_constraint
FROM 
 sys.indexes i
 JOIN sys.index_columns ic ON ic.object_id = i.object_id and i.index_id = ic.index_id
 JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
ORDER BY 
 tableName ,
 ic.index_id ,
 ic.index_column_id
8
Aaron Sherman

Si vous souhaitez qu'une procédure stockée système globale soit disponible pour obtenir des colonnes d'index/nonkeys (include), exécutez le code suivant

USE master
GO

CREATE PROCEDURE sp_helpcolindex
    @objname NVARCHAR(776)
AS
BEGIN
    SELECT 
        c.Name,
        CASE ic.is_included_column WHEN 0 THEN 'Key' ELSE 'Include' END AS [Type]
    FROM sys.indexes i
    JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
    WHERE i.name = @objname 
    ORDER BY [Type] DESC
END
GO

EXEC sp_ms_marksystemobject 'sp_helpcolindex' 
GO 
0
Ivanzinho