在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。
/*
1. exec sp_spaceused '表名' (SQL统计数据,大量事务操作后可能不准)
2. exec sp_spaceused '表名', true (更新表的空间大小,准确的表空大小,但可能会花些统计时间)
3. exec sp_spaceused (数据库大小查询)
4. exec sp_MSforeachtable "exec sp_spaceused '?'" (所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准)
5. exec sp_MSforeachtable "exec sp_spaceused '?',true" (所有用户表空间表小,大数据库慎用)
*/
create table #t(name varchar ( 255 ), rows bigint , reserved varchar ( 20 ), data varchar ( 20 ), index_size varchar ( 20 ), unused varchar ( 20 ))
exec sp_MSforeachtable " insert into #t exec sp_spaceused ' ? ' "
select * from #t
drop table #t
另外,还有sp_MSforeachdb可以遍历所有数据库,使用方法详见SQL帮助。
方法2:
SET NOCOUNT ON
DECLARE @tablename VARCHAR(255)
DECLARE table_list_cursor CURSOR
FOR
SELECT name
FROM sys.tables
ORDER BY name
--打开游标
OPEN table_list_cursor
--读取第一条数据
FETCH NEXT FROM table_list_cursor INTO @tablename
SELECT CONVERT(NVARCHAR(255), '') AS name ,
1 AS [rows] ,
CONVERT(NVARCHAR(255), '') AS 'res' ,
CONVERT(NVARCHAR(255), '') AS [data] ,
CONVERT(NVARCHAR(255), '') AS indexs ,
CONVERT(NVARCHAR(255), '') AS unuse
INTO #temp
--遍历查询到的表名
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #temp
EXEC sp_spaceused @tablename
FETCH NEXT FROM table_list_cursor INTO @tablename
END
--释放游标
CLOSE table_list_cursor
DEALLOCATE table_list_cursor
SELECT *
FROM #temp order by len(res) desc;
DROP TABLE #temp
标签:exec,list,占用,sp,SQLSERVER,数据表,table,spaceused,255 From: https://blog.51cto.com/u_14682436/8071852