返回当前数据库中所有用户表的使用空间列表

来源:互联网 发布:sql truncate 编辑:程序博客网 时间:2024/06/06 06:34
 --返回当前数据库中所有用户表的使用空间列表
--create PROC tablespace_list
--AS
--SET NOCOUNT ON

DECLARE @tblcount INT     --表的个数
    ,@tblname VARCHAR(60) --表名
--用于存放最终结果的表变量
DECLARE @result TABLE (表名 VARCHAR(40),
        行数 VARCHAR(11),
        预申请空间      VARCHAR(15) NULL,
        数据占用空间     VARCHAR(15) NULL,
        索引占用空间     VARCHAR(15) NULL,
        空闲              VARCHAR(15) NULL
        );
--用于存放所有表名的表变量
DECLARE @tbl TABLE (tblname VARCHAR(256),
       id INT IDENTITY(1,1) NOT NULL
       );

--将当前库中所有的表名存入表变量@tbl
INSERT INTO @tbl
SELECT '['+b.name+'].['+a.name+']' AS tblname 
FROM sys.all_objects a join sys.schemas b
ON    a.schema_id=b.schema_id
WHERE a.type='U'

--获得当前库中表的个数
SELECT @tblcount=MAX(id) FROM @tbl

WHILE @tblcount>0
BEGIN
SELECT @tblname=tblname FROM @tbl WHERE id=@tblcount
INSERT INTO @result EXEC ('EXEC SP_SPACEUSED ' +'"'+@tblname+'"')
SET @tblcount=@tblcount-1
END

SELECT * FROM @result ORDER BY CONVERT(INT,REPLACE(预申请空间,'kb','')) DESC