我常用sp_spaceused来查看表所占的空间大小,可是一次只能看一个对象的。
今天有空写了个sp_spaceused2,可以同时看全部表的空间大小。

功能

显示当前数据库中某个类型表的行数、由它保留和使用的磁盘空间。

语法

sp_spaceused2 [[@type=] 'type']
    [,[@updateusage =] 'updateusage']

参数

[@type =] 'type'

是要显示的表的类型名称。可以是下列对象类型中的一种:
S = 系统表
U = 用户表
type 的数据类型是 varchar(2),默认设置为 'U'。

[@updateusage =] 'updateusage'

表示应在数据库内运行 DBCC UPDATEUSAGE。值可以是 truefalseupdateusage 的数据类型是 varchar(5),默认设置为 FALSE。

返回代码值

0(成功)或 1(失败)

结果集

返回针对指定类型的表的结果集。

列名 数据类型 描述
name nvarchar(128) 表名。
rows char(11) 表中现有的行数。
reserved varchar(18) 为表保留的空间总量。
data varchar(18) 表中的数据所使用的空间总量。
index_size varchar(18) 表中的索引所使用的空间总量。
unused varchar(18) 为表保留但尚未使用的空间总量。

注释

sp_spaceused 计算数据和索引使用的磁盘空间量以及当前数据库中的表所使用的磁盘空间量。

当指定 updateusage 时,Microsoft SQL Server 扫描数据库中的数据页,并就每个表使用的存储空间对 sysindexes 表作出任何必要的纠正。例如会出现这样一些情况:当除去索引后,表的 sysindexes 信息可能不是当前的。该进程在大表或数据库上可能要花一些时间运行。只有当怀疑所返回的值不正确,而且该进程对数据库中的其它用户或进程没有负面影响时,才应使用该进程。如果需要,可以单独运行 DBCC UPDATEUSAGE。

代码

http://www.sql-club.com/Luke/archive/2006/05/12/553.aspx