Search This Blog

Showing posts with label Find Table Size. Show all posts
Showing posts with label Find Table Size. Show all posts

Saturday, December 27, 2008

Find Table Size In a Database


/* This Script will List Table size in a database
SQL Server 2005 
SQL Server 2000*/

declare @id        int                                          
declare @type  character(2)                      
declare @pages                int                                          
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage               dec(15,0)
declare @pagesperMB                  dec(15,0)

create table #spt_space
(
                objid                      int null,
                rows                      int null,
                reserved              dec(15) null,
                data                       dec(15) null,
                indexp                  dec(15) null,
                unused                 dec(15) null
)

set nocount on

-- Create a cursor to loop through the user tables
declare c_tables cursor for
select    id
from      sysobjects
where   xtype = 'U'

open c_tables

fetch next from c_tables
into @id

while @@fetch_status = 0
begin

                /* Code from sp_spaceused */
                insert into #spt_space (objid, reserved)
                                select objid = @id, sum(reserved)
                                                from sysindexes
                                                                where indid in (0, 1, 255)
                                                                                and id = @id

                select @pages = sum(dpages)
                                                from sysindexes
                                                                where indid <>
                                                                                and id = @id
                select @pages = @pages + isnull(sum(used), 0)
                                from sysindexes
                                                where indid = 255
                                                                and id = @id
                update #spt_space
                                set data = @pages
                where objid = @id


                /* index: sum(used) where indid in (0, 1, 255) - data */
                update #spt_space
                                set indexp = (select sum(used)
                                                                from sysindexes
                                                                where indid in (0, 1, 255)
                                                                and id = @id)
                                                    - data
                                where objid = @id

                /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
                update #spt_space
                                set unused = reserved
                                                                - (select sum(used)
                                                                                from sysindexes
                                                                                                where indid in (0, 1, 255)
                                                                                                and id = @id)
                                where objid = @id

                update #spt_space
                                set rows = i.rows
                                                from sysindexes i
                                                                where i.indid <>
                                                                and i.id = @id
                                                                and objid = @id

                fetch next from c_tables
                into @id
end

select    TableName = (select left(name,60) from sysobjects where id = objid),
                Rows = convert(char(11), rows),
                ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
                DataKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
                IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
                UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
                               
from      #spt_space, master.dbo.spt_values d
where   d.number = 1
and        d.type = 'E'
order by reserved desc
drop table #spt_space
close c_tables
deallocate c_tables