Thursday, May 3, 2018

Get a list of all index & index columns in SQL Server


SELECT TableName = t.NAME,
       IndexName = ind.NAME,
       IndexId = ind.index_id,
       ColumnId = ic.index_column_id,
       ColumnName = col.NAME,
       ind.*,
       ic.*,
       col.*
FROM   sys.indexes ind
       INNER JOIN sys.index_columns ic
               ON ind.object_id = ic.object_id
                  AND ind.index_id = ic.index_id
       INNER JOIN sys.columns col
               ON ic.object_id = col.object_id
                  AND ic.column_id = col.column_id
       INNER JOIN sys.tables t
               ON ind.object_id = t.object_id
WHERE  ind.is_primary_key = 0
       AND ind.is_unique = 0
       AND ind.is_unique_constraint = 0
       AND t.is_ms_shipped = 0
       AND t.NAME = 'Order' -- Replace with the table name that you want to check
ORDER  BY t.NAME, ind.index_id, ind.NAME, ic.index_column_id;