1、建表

create table dmb_tmp
(
name nvarchar(50),
rows int,
reserved nvarchar(50),
data nvarchar(50),
index_size nvarchar(50),
unused nvarchar(50)
)

2、使用系统过程,将结果插入到数据表中

insert into dmb_tmp(name,rows,reserved,data,index_size,unused) exec sp_spaceused 'table_name';
insert into dmb_tmp(name,rows,reserved,data,index_size,unused) exec sp_spaceused 'table_name',true;


3、查询结果

select name,
       cast(replace(data,'KB','') as numeric)/1024 ,
       cast(replace(index_size,'KB','') as numeric)/1024 ,
       cast(replace(unused,'KB','') as numeric)/1024
  from dmb_tmp;

以上是在SQL Server2000中试验通过的,第二步中不带参数true的据说是算出来的数据不准,还没有去考证。

第三步中的的计算结果都是KB,而且是字符型的数据,做了进一步的转换,转成了数值型的,这个不是必须的

,可以有很多的方法,以上就是今的总结。

题外话:小弟平时用的都是Oracle,能够有幸用到SQL Server也是托局方的服,局方也是把双刃剑啊,虽然有

幸用到SQL Server,但是也有幸被局方骚扰,本来这个SQL Server是另一个公司的系统所用的数据库,由于各

种原因,最终的数据要到我们的库里来导,今天早上,同事来电告知数据又没有到位,于是登陆到SQL Server

服务器看了一眼,原来是空间不足,本来就不是我们的数据库,维护的问题也轮不到我们,就连我们用的数据

库也是第三方公司来维护,这个确实挺省事,于是告知局方,要他们来处理,本来以为没有事情,下午变态的

局方突然来问,今天空间被占用满了是为什么,被弄的是晕晕乎乎的(+﹏+)~,本来就不是我们的数据库,维护

也不是,却来找我们问原因,简直不知道局方中午吃了什么,只好含含糊糊的应付了一下,下午索性没有事情,

于是上网找了找怎么才能计算表所占存储的大小,由于过于关注结果,个别的帖子没有完全看清,只是找了一个

比较简洁的计算方法,印象中好像有自己来写脚本查看的,对于我这个菜鸟来讲还是蛮厉害的O(∩_∩)O~