现在位置:
首页 > SQL Server > 正文
统计数据库中各个表和空间使用情况
为了方便大家使用,我写成了一个存储过程,如果喜欢就拿去吧,如果觉得有什么不对的地方,留言哈,我有一空就会修改!
废话少说,上代码(转载请注明出处,谢谢):
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: longle(http://longle.taobao.com)--
Create date: 2011-06-17
-- Description: 统计数据库中各个表和空间使用情况
-- =============================================
ALTERPROCEDURE sp_GetDbSpaceUsedInfo
AS
BEGIN
SET NOCOUNT ON;
DECLARE@tempVARCHAR(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' 获取指定表名的空间使用情况 */
IFNOTEXISTS(SELECT NAME FROM sys.sysobjects WHERE name='#temptable')
BEGIN
createtable #temptable( [name] VARCHAR(50),
[rows]INT, [reserved] varchar(50), [data] VARCHAR(50), [size] VARCHAR(50), [unused] varchar(50) ) ENDOPEN c_rlt --打开游标
FETCH NEXT FROM c_rlt INTO@tempWHILE@@FETCH_STATUS=0BEGIN
FETCHNEXTFROM c_rlt INTO@temp--把查询结果放到临时变量@temp中INSERT
INTO #temptable
EXEC sys.sp_spaceused @temp--把查询结果放到临时表#temptable中END
CLOSE c_rlt
--别忘记关闭游标
DEALLOCATE c_rlt
--别忘记删除游标
SELECT*FROM #temptable
--从临时表查查询结果
DROPTABLE #temptable --删除临时表了
ENDGO
/*测试用例
exec sp_GetDbSpaceUsedInfo
*/
结果如下:
(转载请注明出处,谢谢,有什么问题请留言哈!)