共享几段小代码
--刚才突然想到要写两个小程序, 写好了, 顺便拿出来共享一下
--欢迎指正
/*
[sql]查看数据库中各表的存储空间
*/
--==========================================================
--修改这里
use gpms --进入相应的数据库
go
--==========================================================
declare @dbname varchar(40)
declare @dbsize int
declare @sql nvarchar(1000)
declare @tablename varchar(40)
--==========================================================
--修改这里
set @dbname='gpms' --设置想要查询的数据库名字
--==========================================================
--创建存放各数据表所占用空间的中间表
if object_id('table_info') is not null drop table table_info
create table table_info(
Name nvarchar(40),
Rows char(21),
reserved varchar(28),
Data varchar(28),
index_size varchar(28),
Unused varchar(28))
--查看每一个用户表
DECLARE cur_table CURSOR
FOR SELECT name FROM sysobjects where xtype='U'
OPEN cur_table
FETCH NEXT FROM cur_table into @tablename
SET NOCOUNT ON
WHILE @@FETCH_STATUS = 0
BEGIN
insert table_info exec sp_spaceused @tablename
FETCH NEXT FROM cur_table into @tablename
END
SET NOCOUNT OFF
CLOSE cur_table
DEALLOCATE cur_table
--求出数据库的大小
SET @sql=N'select @size=size from '+@dbname+'..sysfiles where groupid=1'
print @sql
EXEC sp_executesql @sql, N' @size int OUTPUT', @dbsize output
--@size的单位为8KB
set @dbsize=@dbsize*8
select 数据名=@dbname,
数据库大小=convert(varchar(40), @dbsize)+' KB',
用户表的数目=convert(varchar(10), count(1))+' 个',
所有表的数据所占的空间=convert(varchar(100), sum(convert(int, replace(data, 'KB', ''))))+' KB'
from table_info
--输出表的信息
select 表名=Name,表中记录数=Rows, 为该表分配的总量=reserved,
表中数据所占的空间=data, 表中索引所占的空间=index_size
from table_info order by data desc , rows desc
--清除
drop table table_info