找回密码
 注册
首页 ≡≡网络技术≡≡ 数据库 如何获取SQL Server数据库里表的占用容量大小 ...

如何获取SQL Server数据库里表的占用容量大小

灰儿 2007-12-3 22:23:49
如何获取SQL Server数据库里表的占用容量大小其实只要使用系统内置的存储过程sp_spaceused就可以得到表的相关信息 如:sp_spaceused 'tablename'

以下是为了方便写的一个存储过程,目的是把当前的所有表的相关信息全部都保存在一个指定的表里面
CREATE
PROCEDURE get_tableinfo AS

if
not
exists (select
*
from dbo.sysobjects where id =
object_id(N'[dbo].[tablespaceinfo]') and
OBJECTPROPERTY(id, N'IsUserTable') =
1)
create
table  tablespaceinfo                         --创建结果存储表
              (nameinfo varchar(50) ,  
               rowsinfo
int , reserved varchar(20) ,  
               datainfo
varchar(20)  ,  
               index_size
varchar(20) ,  
               unused
varchar(20) )


delete
from tablespaceinfo --清空数据表

declare
@tablename
varchar(255)  --表名称

declare
@cmdsql
varchar(500)

DECLARE Info_cursor CURSOR
FOR  
select o.name   
from dbo.sysobjects o where
OBJECTPROPERTY(o.id, N'IsTable') =
1  
     
and o.name not
like N'#%%'
order
by o.name

OPEN Info_cursor

FETCH
NEXT
FROM Info_cursor  
INTO
@tablename  

WHILE
@@FETCH_STATUS
=
0
BEGIN

  
if
exists (select
*
from dbo.sysobjects where id =
object_id(@tablename) and
OBJECTPROPERTY(id, N'IsUserTable') =
1)
  
execute sp_executesql  
         N
'insert into tablespaceinfo  exec sp_spaceused @tbname',
          N
'@tbname varchar(255)',
         
@tbname
=
@tablename

  
FETCH
NEXT
FROM Info_cursor  
  
INTO
@tablename  
END

CLOSE Info_cursor
DEALLOCATE Info_cursor
GO
执行存储过程
exec get_tableinfo

查询运行该存储过程后得到的结果
select *
from tablespaceinfo  
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。