您的位置:首页 > 数据库

SQL Server查看所有表大小,所占空间

2017-08-17 14:30 316 查看
今天从一台服务器中备份数据库到另一台服务器中,然后进行数据恢复的时候,删除了数据库中很多表和数据,还有日志,发现备份恢复后的数据库还是很大,所以就想查询一下表大小和所占空间大小。

SQL代码如下:

create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))

declare @name varchar(100)
declare cur cursor for
select name from sysobjects where xtype='u' order by name
open cur
fetch next from cur into @name
while @@fetch_status=0
begin
insert into #data
exec sp_spaceused @name --取得表占用空間
print @name

fetch next from cur into @name
end
close cur
deallocate cur

create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int)

insert into #dataNew
select name,convert(int,row) as row,convert(int,replace(reserved,'KB','')) as reserved,convert(int,replace(data,'KB','')) as data,
convert(int,replace(index_size,'KB','')) as index_size,convert(int,replace(unused,'KB','')) as unused from #data

select * from #dataNew order by data desc 关键语句是:
exec sp_spaceused '表名'   --取得表占用空间
exec sp_spaceused ''       --数据库所有空间

简单介绍一下系统内置的sp_spaceused 存储过程:

sp_spaceused [ @objname=], [ @updateusage=]   

参数

[@objname =] 'objname'

是为其请求空间使用信息(保留和已分配的空间)的表名。objname 的数据类型是 nvarchar(776),默认设置为 NULL。

[@updateusage =] 'updateusage'

表示应在数据库内(未指定 objname 时)还是在特定的对象上(指定 objname 时)运行 DBCC UPDATEUSAGE。值可以是 true 或 false。updateusage 的数据类型是 varchar(5),默认设置为 FALSE。

返回代码值

0(成功)或 1(失败)

结果集

如果省略 objname,则返回两个结果集。



如果指定参数,则返回下面的结果集。



参考文章:

查询SQL 表大小和所占空间:http://www.cnblogs.com/nikyxxx/archive/2012/10/08/2715423.html

详细介绍sp_spaceused 存储过程用法:http://www.yesky.com/imagesnew/software/tsql/ts_sp_sa-sz_0kro.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: