SQLServer查看数据表占用硬盘的空间大小:sp_spaceused

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 的使用参见:
(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解

你可能感兴趣的:(SQLServer,T-SQL)