2013-08-11 11 views
13

Avevo provato sp_helpindex ma mostra le colonne che hanno indice non le colonne incluse. Per favore dimmi come elencare tutti gli indici con colonne incluse (non chiavi)?Elenca tutti gli indici con colonne incluse (non chiavi)

+0

Questa domanda sembra essere fuori tema, perché nessun tentativo fatto. –

+0

Benvenuti in Stack Overflow! Posso farvi riferimento a questo: http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist –

risposta

21

Prova questa ricerca T-SQL contro le viste del catalogo:

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 

Esso controlla praticamente tutti gli indici (sys.indexes) e poi i link ai loro colonne e controlli per vedere quali colonne sono progettati come colonne incluse (ic.is_included_column = 1) e quindi elenca tutti quegli indici e tutte quelle colonne.

+1

Grazie mille per questo codice. Ho cercato un modo per identificare gli indici su una particolare tabella e colonna. Questo è l'SQL più pulito e migliore che abbia mai trovato. – maccaroo

+0

Sto ottenendo risultati misti con questo. Sembra che se c'è più di un indice su una tabella data, viene restituito solo uno da quella tabella. –

4

copiato da 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 
Problemi correlati