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

2021年8月22日 24点热度 0条评论 来源: Microstrong0305

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

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

    原文作者:Microstrong0305
    原文地址: https://blog.csdn.net/program_developer/article/details/77325411
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。