DECLARE @tbl VARCHAR(255); SET @tbl = 'charges' SELECT o.name , i.index_id , i.name , i.type_desc , SUBSTRING(ikey.cols, 3, LEN(ikey.cols)) AS key_cols , SUBSTRING(inc.cols, 3, LEN(inc.cols)) AS included_cols , STATS_DATE(o.object_id, i.index_id) AS stats_date , i.filter_definition FROM sys.objects o JOIN sys.indexes i ON i.object_id = o.object_id CROSS APPLY ( SELECT ', ' + c.name + CASE ic.is_descending_key WHEN 1 THEN ' DESC' ELSE '' END FROM sys.index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 0 ORDER BY ic.key_ordinal FOR XML PATH('') ) AS ikey ( cols ) OUTER APPLY ( SELECT ', ' + c.name FROM sys.index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 1 ORDER BY ic.index_column_id FOR XML PATH('') ) AS inc ( cols ) WHERE o.name = @tbl AND i.type IN ( 1, 2 ) ORDER BY o.name , i.index_id;