DECLARE @chvSqlCmd varchar(8000)
SET @chvSqlCmd=''
SELECT @chvSqlCmd=@chvSqlCmd+'SELECT '''+NAME+''',COUNT(*) FROM '+NAME+CHAR(13)+'UNION'+CHAR(13)
FROM DBO.SYSOBJECTS WHERE XTYPE='U' AND NAME!='dtproperties'
SET @chvSqlCmd=SubString(@chvSqlCmd,1,len(@chvSqlCmd)-7)
--The 7 is len('UNION'+char(13),+char(13))
EXEC (@chvSqlCmd)
If Exists(Select 1 From sysobjects where name = 'get_tableinfo' and xtype = 'p')
drop proc get_tableinfo
go
CREATE PROCEDURE get_tableinfo AS
set nocount on
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --创建结果存储表
(Name varchar(50) ,
Rows int , reserved varchar(20) ,
Data varchar(20) ,
index_size varchar(20) ,
Unused varchar(20) )
truncate table tablespaceinfo --清空数据表
declare @tablename varchar(255) --表名称
declare @cmdsql varchar(500)
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where xtype = 'u' 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)
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
set nocount off
GO
--执行存储过程
exec get_tableinfo
--查询运行该存储过程后得到的结果
Select
Name 表名,
Rows 行数,
str(cast(replace(reserved,'KB','') as int) / 1024.00,7,2) + 'Mb' 表保留的空间总量,
str(cast(replace(Data,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中的数据所使用的空间量,
str(cast(replace(index_size,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中的索引所使用的空间量,
str(cast(replace(Unused,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中未用的空间量
from tablespaceinfo
order by 3 desc