您的位置:首页 > 数据库

获取SQL Server数据库里表容量大小

2011-05-30 12:03 447 查看
一、定义存储过程

目的是把当前的所有表的相关信息全部都保存在一个指定的表里面

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

************************************************************************************

简单分析:

1、单个表

EXEC sp_spaceused N'表名';

2、数据库

use [要查看的数据库]

sp_spaceused

3、所有数据库

exec sp_MSForEachDb @Command1 = "use ? exec sp_Spaceused"

************************************************************************************

文章来自: 好喜爱学习网(http://www.haoxiai.net/
) 网址:http://www.haoxiai.net/shujuku/MSSQL/101720.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: