得到数据表容量大小

    要想获得表的空间使用概况,可以考虑使用sp_spaceused存储过程.这个存储过程用于"显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。"(摘自联机丛书),更具体的使用方法可以参考联机丛书.

    要想获得单一表的空间使用情况,只需要:
    exec sp_spaceused 'FA_Opti_InsurPurview_Bak'
    这个过程会返回类似下列的结果:
   

    sp_spaceused每次只针对一个表返回相关使用情况,如果需要返回整个数据库中的所有用户表的空间使用情况,那么相对复杂一些.google发现这篇网文,大家可以参考"如何获取SQLServer数据库里表的占用容量大小",但排除其排版不说,过程也太复杂啦.其实只要对数据库中每张表都执行一次sp_spaceused,并把所有结果放到一起显示就可以了.在这里可以考虑使用sp_MSforeachtable存储过程来历遍每个用户表.系统存储过程sp_MSforeachtable,是微软提供的两个不公开的存储过程,从ms sql 6.5开始。存放在SQL Server的MASTER数据库中.具体的使用情况可以考虑日志"sp_MSForEachTable和sp_MSForEachDB的使用方法".

     下面使用了sp_MSforeachtable来执行空间检查工作:
     exec sp_MSforeachtable 'exec sp_spaceused ''?'''
     类似的结果如:
    

     不难看到,其实返回的结果还是每个数据表一个数据集,并没有起到合并数据集的作用.还是基于上面的SQL,很方便的就可以达到这个目标了.如下的SQL

create table #allTableSpaceUsed(
	name 		nvarchar(50),
	row 		char(11),
	reserved 	varchar(18),
	data		varchar(18),
	index_size	varchar(18),
	unused		varchar(18)
)

exec sp_MSforeachtable 'insert into #allTableSpaceUsed exec sp_spaceused ''?'''

select * from #allTableSpaceUsed order by name



      通过临时表,将每个结果集都汇总其中,当sp_MSforeachtable之后,临时表中就是每个表的空间使用情况了.

      注:在联机丛书中,介绍sp_spaceused的返回结果集字段类型部分,丛书提到当使用指定参数时,Name字段的长度是nvarchar(20).但由于这个字段保存的是表名,当表名字符长度大于nvarchar(20)时,临时表需要定义一个更大的字段长度值.

Tag标签: 空间 原创
发表于 2010-02-23 01:59:21 收藏 所属分类: 数据库 网摘收藏
相关文章: