现在位置:
首页 > SQL Server > 正文
sql查看各个表和空间使用情况
为了方便大家使用,我写成了一个存储过程,如果喜欢就拿去吧,如果觉得有什么不对的地方,留言哈,我有一空就会修改!
废话少说,上代码(转载请注明出处,谢谢):
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- =============================================
- -- Author: longle(http://longle.taobao.com)
- -- Create date: 2011-06-17
- -- Description: 统计数据库中各个表和空间使用情况
- -- =============================================
- ALTER PROCEDURE sp_GetDbSpaceUsedInfo
- AS
- BEGIN
- SET NOCOUNT ON;
- DECLARE @temp VARCHAR(50) --声明表名临时变量
- DECLARE c_rlt CURSOR --声明游标c_rlt
- FOR
- select o.name from sysobjects o,sysindexes i
- where o.id=i.id and o.Xtype='U' and i.indid<2 --获取数据库中的表名
- /*
- 声明临时表,要求字段必须和 EXEC sys.sp_spaceused 'tbname'中返回的结果一致
- EXEC sys.sp_spaceused 'tbname' 获取指定表名的空间使用情况
- */
- IF NOT EXISTS(SELECT NAME FROM sys.sysobjects WHERE name='#temptable')
- BEGIN
- create table #temptable(
- [name] VARCHAR(50),
- [rows] INT,
- [reserved] varchar(50),
- [data] VARCHAR(50),
- [size] VARCHAR(50),
- [unused] varchar(50)
- )
- END
- OPEN c_rlt --打开游标
- FETCH NEXT FROM c_rlt INTO @temp
- WHILE @@FETCH_STATUS=0
- BEGIN
- FETCH NEXT FROM c_rlt INTO @temp --把查询结果放到临时变量@temp中
- INSERT INTO #temptable EXEC sys.sp_spaceused @temp --把查询结果放到临时表#temptable中
- END
- CLOSE c_rlt --别忘记关闭游标
- DEALLOCATE c_rlt --别忘记删除游标
- SELECT * FROM #temptable --从临时表查查询结果
- DROP TABLE #temptable --删除临时表了
- END
- GO
- /*测试用例
- exec sp_GetDbSpaceUsedInfo
- */
结果如下: