List index information for the current database

,

This SQL script returns a recordset with all the index information for all tables within a database

--****************************************************************************************
-- List index information for the current database
--****************************************************************************************
-- Version: 	1.0
-- Author:	Theo Ekelmans 
-- Email:	theo@ekelmans.com
-- Date:	2005-10-07
--****************************************************************************************

set nocount on 

select 	o.name as 'TableName',
	i.name as 'IndexName',
	CASE WHEN (i.status & 0x800)     = 0 THEN 0 ELSE 1 END AS 'Primary', 
	CASE WHEN (i.status & 0x10)      = 0 THEN 0 ELSE 1 END AS 'Clustered', 
	CASE WHEN (i.status & 0x2)       = 0 THEN 0 ELSE 1 END AS 'Unique', 
	CASE WHEN (i.status & 0x1)       = 0 THEN 0 ELSE 1 END AS 'IgnoreDupKey', 
	CASE WHEN (i.status & 0x4)       = 0 THEN 0 ELSE 1 END AS 'IgnoreDupRow', 
	CASE WHEN (i.status & 0x1000000) = 0 THEN 0 ELSE 1 END AS 'NoRecompute', 
	i.OrigFillFactor AS 'FillFactor', 
	i.rowcnt as 'Est.RowCount',
	i.reserved * cast(8 as bigint) as ReservedKB,  
	i.used * cast(8 as bigint) as UsedKB,  
	k.keyno as 'KeyNumber',
	c.name as 'ColumnName',
	t.name as 'DataType', 
	c.xprec as 'Precision',
	c.xscale as 'Scale', 
	c.iscomputed as 'IsComputed', 
	c.isnullable as 'IsNullable', 
	c.collation as 'Collation'
from 	           sysobjects   o with(nolock)
	inner join sysindexes   i with(nolock) on o.id    =  i.id
	inner join sysindexkeys k with(nolock) on i.id    =  k.id    and    i.indid =  k.indid
	inner join syscolumns   c with(nolock) on k.id    =  c.id    and    k.colid =  c.colid 
	inner join systypes     t with(nolock) on c.xtype =  t.xtype 

where 	o.xtype <> 'S' -- Ignore system objects
and 	i.name not like '_wa_sys_%' -- Ignore statistics

order by
	o.name, 
	k.indid,
	k.keyno

Rate

Share

Share

Rate