0% found this document useful (0 votes)
151 views4 pages

SP Helpindex2

This stored procedure provides a summary of all indexes for all tables in a database. It opens cursors to loop through tables and their indexes, collects information about each index like its keys and properties, and inserts it into a temporary table. The results are then selected from the temporary table and displayed, showing the table name, index name, index type and properties, and keys for each index.

Uploaded by

divandann
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
151 views4 pages

SP Helpindex2

This stored procedure provides a summary of all indexes for all tables in a database. It opens cursors to loop through tables and their indexes, collects information about each index like its keys and properties, and inserts it into a temporary table. The results are then selected from the temporary table and displayed, showing the table name, index name, index type and properties, and keys for each index.

Uploaded by

divandann
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

USE master GO -- Modified sp_helpindex SP to show all indexes for all tables CREATE proc sp_helpindex2 --@objname nvarchar(776)

s as -- PRELIM set nocount on declare @objname nvarchar(776), @objid int, table @indid smallint, -- the index id of an index @groupid smallint, -- the filegroup id of an index @indname sysname, @groupname sysname, @status int, @keys nvarchar(2126), --Length (16*max_identifierLengt h)+(15*2)+(16*3) @dbname sysname -- Check to see that the object names are local to the current database. select @dbname = parsename(@objname,3) if @dbname is not null and @dbname <> db_name() begin raiserror(15250,-1,-1) return (1) end -- create temp table create table #spindtab ( table_name index_name NOT NULL, stats groupname NOT NULL, index_keys nvarchar(2126) collate database _default NOT NULL -- see @keys above for length descr ) -- OPEN CURSOR OVER TABLES (skip stats: bug shiloh_51196) declare ms_crs_tab cursor local static for select name from sysobjects where type = 'U' open ms_crs_tab fetch ms_crs_tab into @objname while @@fetch_status >= 0 begin int, sysname collate database_default sysname, sysname collate database_default -- the table to check for indexe

-- the object id of the

-- Check to see the the table exists and initialize @objid. select @objid = object_id(@objname) if @objid is NULL begin select @dbname=db_name() raiserror(15009,-1,-1,@objname,@dbname) return (1) end -- OPEN CURSOR OVER INDEXES (skip stats: bug shiloh_51196) declare ms_crs_ind cursor local static for select indid, groupid, name, status from sysindexes where id = @objid and indid > 0 and indid < 255 and (sta tus & 64)=0 order by indid open ms_crs_ind fetch ms_crs_ind into @indid, @groupid, @indname, @status -- IF NO INDEX, QUIT --if @@fetch_status < 0 --begin -deallocate ms_crs_ind -raiserror(15472,-1,-1) --'Object does not have any indexes.' -return (0) --end -- Now check out each index, figure out its type and keys and -save the info in a temporary table that we'll print out at the e nd. while @@fetch_status >= 0 begin -- First we'll figure out what the keys are. declare @i int, @thiskey nvarchar(131) -- 128+3 select @keys = index_col(@objname, @indid, 1), @i = 2 if (indexkey_property(@objid, @indid, 1, 'isdescending') = 1) select @keys = @keys + '(-)' select @thiskey = index_col(@objname, @indid, @i) if ((@thiskey is not null) and (indexkey_property(@objid, @indid , @i, 'isdescending') = 1)) select @thiskey = @thiskey + '(-)' while (@thiskey is not null ) begin select @keys = @keys + ', ' + @thiskey, @i = @i + 1 select @thiskey = index_col(@objname, @indid, @i) if ((@thiskey is not null) and (indexkey_property(@objid , @indid, @i, 'isdescending') = 1)) select @thiskey = @thiskey + '(-)' end select @groupname = groupname from sysfilegroups where groupid = @groupid -- INSERT ROW FOR INDEX insert into #spindtab values (@objname,@indname, @status, @group name, @keys) -- Next index fetch ms_crs_ind into @indid, @groupid, @indname, @status

end deallocate ms_crs_ind fetch ms_crs_tab into @objname end deallocate ms_crs_tab -- SET UP SOME CONSTANT VALUES FOR OUTPUT QUERY declare @empty varchar(1) select @empty = '' declare @des1 varchar(35), -- 35 matches spt_values @des2 varchar(35), @des4 varchar(35), @des32 varchar(35), @des64 varchar(35), @des2048 varchar(35), @des4096 varchar(35), @des8388608 varchar(35), @des16777216 varchar(35) select @des1 = name from master.dbo.spt_values where type = 'I' and numb er = 1 select @des2 = name from master.dbo.spt_values where type = 'I' and numb er = 2 select @des4 = name from master.dbo.spt_values where type = 'I' and numb er = 4 select @des32 = name from master.dbo.spt_values where type = 'I' and num ber = 32 select @des64 = name from master.dbo.spt_values where type = 'I' and num ber = 64 select @des2048 = name from master.dbo.spt_values where type = 'I' and n umber = 2048 select @des4096 = name from master.dbo.spt_values where type = 'I' and n umber = 4096 select @des8388608 = name from master.dbo.spt_values where type = 'I' an d number = 8388608 select @des16777216 = name from master.dbo.spt_values where type = 'I' a nd number = 16777216 -- DISPLAY THE RESULTS select 'table_name'=table_name, 'index_name' = index_name, 'index_description' = convert(varchar(210), --bits 16 off, 1, 2, 16777216 on, located on group case when (stats & 16)<>0 then 'clustered' else 'nonclustered' end + case when (stats & 1)<>0 then ', '+@des1 else @empty end + case when (stats & 2)<>0 then ', '+@des2 else @empty end + case when (stats & 4)<>0 then ', '+@des4 else @empty end + case when (stats & 64)<>0 then ', '+@des64 els e case when (stats & 32)<>0 then ', '+@des32 else @empty end end + case when (stats & 2048)<>0 then ', '+@des2048 else @empty end + case when (stats & 4096)<>0 then ', '+@des4096 else @empty end + case when (stats & 8388608)<>0 then ', '+@des8 388608 else @empty end + case when (stats & 16777216)<>0 then ', '+@des

16777216 else @empty end + ' located on ' + groupname), 'index_keys' = index_keys from #spindtab order by table_name, index_name return (0) -- sp_helpindex GO

You might also like