获取所有表的占用空间信息_SQL Server

复制代码,直接可用。

 1 create table #tablespaceinfo  --创建结果存储表
 2 (nameinfo varchar(150) ,
 3 rowsinfo int , 
 4 reserved varchar(120) ,
 5 datainfo varchar(120),
 6 index_size varchar(120) ,
 7 unused varchar(120) )
 8 
 9 declare @tablename varchar(255) --表名称
10 declare @cmdsql varchar(500)
11 DECLARE Info_cursor CURSOR FOR
12 select o.name
13 from sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
14 and o.name not like N'#%%' order by o.name
15 OPEN Info_cursor
16 FETCH NEXT FROM Info_cursor
17 INTO @tablename
18 WHILE @@FETCH_STATUS = 0
19 BEGIN
20 
21 if exists (select * from sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
22 
23 exec('insert into #tablespaceinfo exec sp_spaceused '''+@tablename+'''')
24 
25 PRINT @tablename
26 FETCH NEXT FROM Info_cursor
27 INTO @tablename
28 END
29 
30 CLOSE Info_cursor
31 DEALLOCATE Info_cursor
32 select 
33 nameinfo as 表名 ,b.chnname,rowsinfo as 记录数
34 ,reserved as 保留空间,datainfo as 使用空间
35 ,index_size as 索引使用空间,unused as 未用空间
36 ,convert(varchar(20),cast(stuff(rtrim(reserved),len(rtrim(reserved))-2,3,'') as int)/1024.0)+' MB'  as 保留空间MB,convert(varchar(20),cast(stuff(rtrim(datainfo),len(rtrim(datainfo))-2,3,'') as int)/1024.0)+' MB' as 使用空间MB
37 , convert(varchar(20),cast(stuff(rtrim(index_size),len(rtrim(index_size))-2,3,'') as int)/1024.0)+' MB'   as 索引使用空间MB, convert(varchar(20),cast(stuff(rtrim(unused),len(rtrim(unused))-2,3,'') as int)/1024.0)+' MB' as 未用空间MB
38  from #tablespaceinfo a LEFT JOIN tblist b ON a.nameinfo=b.tbname
39  WHERE  rowsinfo>0
40  order by convert(int,isnull(left(reserved,len(rtrim(reserved))-3),'0')) DESC,
41  cast(stuff(rtrim(index_size),len(rtrim(index_size))-2,3,'') as int) desc,cast(stuff(rtrim(datainfo),len(rtrim(datainfo))-2,3,'') as int) desc,cast(stuff(rtrim(unused),len(rtrim(unused))-2,3,'') as int) desc
42 drop table #tablespaceinfo

效果图

猜你喜欢

转载自www.cnblogs.com/dave555/p/9719028.html
今日推荐