查询某个数据库各个表占用的空间大小

选中相应数据库,右键点击新建查询,输入一下代码

--判断是否存在结果存储表[tablespaceinfo]。如果不存在,则创建
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
)
 
--说明:sp_executesql 执行可以多次重复使用或动态生成的Transact-SQL 语句或批处理
 
-- sp_spaceused 显示行数、保留的磁盘空间以及当前数据库中的表、索引视图
 
-- 或Service Broker 队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
 
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
 
--显示数据库信息
sp_spaceused @updateusage = 'TRUE'
 
--显示表信息
select * from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc

然后点击执行即可

猜你喜欢

转载自blog.csdn.net/shu19880720/article/details/83058140