SQLUSA.com
SQL SERVER 2008 GRAND SLAM
FREE TRIAL  CLICK HERE TO ORDER  SEARCH
SQL JOBS SQL Server Training Scripts JOB BANK
  SQL Server 2008 Training Scripts  
  SQL Server 2005 Training Scripts  
News SQL Server Articles SQL Format

How to list all table sizes in a database?

Execute the following Microsoft SQL Server T-SQL scripts to list the database and each table size within the AdventureWorks2008 database. If you need to store size information for long-term tracking of database growth, permanent table can be used instead of @tablevariable.

use AdventureWorks2008;

go

 

-- Space used by AdventureWorks2008 database

exec sp_spaceused

go

 

/* Results

database_name     database_size     unallocated space

AdventureWorks2008      182.06 MB   0.00 MB

 

reserved    data  index_size  unused

184608 KB   96112 KB    82064 KB    6432 KB

*/

 

-- Space used for all tables

declare @TableSpace table (TableName sysname, RowsK varchar(32),

      ReservedMB varchar(32), DataMB varchar(32),

      IndexSizeMB varchar(32), UnusedMB varchar(32))

     

insert @TableSpace

exec sp_MSforeachtable @command1="exec sp_spaceused '?';"

 

update @TableSpace set RowsK = CONVERT(varchar,

      1+convert(int, RowsK)/1024)

update @TableSpace set ReservedMB = CONVERT(varchar,

      1+convert(int,LEFT(ReservedMB, charindex(' K', ReservedMB,-1)))/1024)

update @TableSpace set DataMB = CONVERT(varchar,

      1+convert(int,LEFT(DataMB, charindex(' K', DataMB,-1)))/1024)

update @TableSpace set IndexSizeMB = CONVERT(varchar,

      convert(int,LEFT(IndexSizeMB, charindex(' K', IndexSizeMB,-1)))/1024)

update @TableSpace set UnusedMB = CONVERT(varchar,

      convert(int,LEFT(UnusedMB, charindex(' K', UnusedMB,-1)))/1024)

     

select * from @TableSpace order by convert(int,DataMB) desc

go

Partial results:

TableName RowsK ReservedMB DataMB IndexSizeMB UnusedMB
Person 20 82 30 51 0
SalesOrderDetail 119 16 10 5 0
DatabaseLog 2 7 7 0 0
TransactionHistory 111 10 7 3 0

 

 

------------

-- List table sizes in descending order - undocumented system proc

------------

CREATE TABLE #TableSpaceUsed (

      name sysname,

      [rows] varchar(32),

      reserved varchar(32),

      data varchar(32),

      index_size varchar(32),

      unused varchar(32))

INSERT #TableSpaceUsed

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

SELECT * FROM #TableSpaceUsed

ORDER BY DATA DESC

/* name     rows  reserved    data  index_size  unused

SalesOrderDetail  121317     15752 KB    9880 KB     5312 KB     560 KB

CustomerAddress   19220      1616 KB     864 KB      552 KB      200 KB

Customer    19185      2600 KB     824 KB      1368 KB     408 KB */

------------

Related article:

Displaying the Sizes of Your SQL Server's Database's Tables By Scott Mitchell

 

Order SQL 2008 GRAND SLAM Today!
SQLUSA.com Home Page
SQL Server Training at www.sqlusa.com.
SQL Server 2008 Video Training at www.sqlusa.com.
SQL Server 2005 Training Videos at www.sqlusa.com.
Microsoft SQL Server 2000 Training Videos at www.sqlusa.com.

FREE SQL & Business Intelligence / OLAP Short Videos on YOUTUBE.com

Microsoft Community Contributor 2011
Invest in Your SUCCESS!

Search SQLUSA FREE SQL Server Articles & FREE T-SQL Scripts


Copyright 2005-2011, SMI Corp. All Rights Reserved.

SQL Server 2012 is a program product of Microsoft Corporation.
SQL Server 2008 is a program product of Microsoft Corporation.
SQL Server 2005 is a program product of Microsoft Corporation.
SQL Server 2000 is a program product of Microsoft Corporation.