查看MSSQL数据库用户每个表占用的空间大小
最近做项目需要查看数据用户表的大小,包括记录条数和占用的磁盘空间数目。在网上找了很久其中查看MSSQL数据库每个表占用的空间大小相对还可以。
不过它的2、3中方法返回的数据比较多,有些是我们不关心的数据,我在AdventureWorks2012数据上做的测试。其中第二种方法代码如下:
View Code if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) delete from tablespaceinfo --清空数据表 declare @tablename varchar(255) --表名称 declare @cmdsql varchar(500) DECLARE Info_cursor CURSOR FOR OPEN Info_cursor FETCH NEXT FROM Info_cursor WHILE @@FETCH_STATUS = 0 if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1) FETCH NEXT FROM Info_cursor CLOSE Info_cursor
--itlearner注:显示表信息 |
运行效果如图:
很显然这个返回结果是错误的。但是它提供了一种思路,修改后的SQL语句如下:
View Code IF NOT EXISTS ( SELECT * CREATE TABLE #temp --创建结果存储表 DECLARE @cmdsql NVARCHAR(500) DECLARE Info_cursor CURSOR OPEN Info_cursor FETCH NEXT FROM Info_cursor WHILE @@FETCH_STATUS = 0 CLOSE Info_cursor
UPDATE #temp INSERT INTO dbo.tablespaceinfo
|
运行结果如图:
同时他的第三种方法返回的数据太多,很多是我们不怎么关心的,原SQL语句如下:
View Code SELECT OBJECT_NAME(id) tablename , |
运行结果如图:
这里面包含一些索引信息,其实我们只关心表占用磁盘信息,修改后的SQL语句如下:
View Code SELECT OBJECT_NAME(id) tablename , |
运行结果如下:
有不对的地方欢迎大家拍砖!
看了zjeagle的回复很好,于是把他的回复贴在下面:
exec sp_MSForEachTable @precommand=N' create table ##(id int identity,表名 sysname,字段数 int,记录数 int,保留空间 Nvarchar(10),使用空间 varchar(10),索引使用空间 varchar(10),未用空间 varchar(10))', @command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?'' update ## set 字段数=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()', @postcommand=N' select * from ## order by convert(INT,replace(保留空间,"KB","")) desc drop table ##' |