得到数据表容量大小
要想获得表的空间使用概况,可以考虑使用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)时,临时表需要定义一个更大的字段长度值.
- 1. 得到数据表容量大小2010-02-23
- 2. 同时更新整个数据库字符类型的值2008-09-10





