sp_spaceused [ @objname=], [ @updateusage=]
Parameter:
[ @objname=] 'objname' ----------------------------要查询的对象名,不指定此参数显示整个数据库的大小。
[ @updateusage=] 'updateusage'----------------是否使用DBCC UPDATEUSAGE更新空间使用信息。
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
详细语法见:
MSDN
示例:
A. 有关表的空间信息
下例报告为 titles 表分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。
EXEC sp_spaceused 'titles'
B. 有关整个数据库的已更新空间信息
下例概括当前数据库使用的空间并使用可选参数 @updateusage。
sp_spaceused @updateusage = 'TRUE'
不过此方法,只能查看一个表的大小,一个数据库中一般会有多个表,如何一次性查看某数据库的所有表大小呢?
drop table test_space
create table test_space(
name varchar(255),
[rows] int,
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
)
insert into test_space
exec sp_MSforeachtable "exec sp_spaceused '?'"
select * from test_space
order by cast(replace(reserved,'KB','') as int) desc
sp_MSforeachtable 的使用参见: