主页 > 知识库 > 一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed

一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed

热门标签:百度地图标注信息怎么修改 AI智能云呼电话机器人怎么注册 福州外呼系统招商 四川稳定外呼系统公司 沈阳外呼系统有效果吗 电话机器人接口是什么样的 温州语音外呼系统排名 怎么在高德地图标注多个点 商家地图标注图片
运行下面存储过程

然后直接使用 SpaceUsed 就可以查看了.

存储过程代码

 程序代码

复制代码 代码如下:

Create procedure SpaceUsed 

as 

begin 

declare @id       int                  -- The object id of @objname. 

declare @type       character(2) -- The object type. 

declare       @pages       int                  -- Working variable for size calc. 

declare @dbname sysname 

declare @dbsize dec(15,0) 

declare @logsize dec(15) 

declare @bytesperpage       dec(15,0) 

declare @pagesperMB              dec(15,0) 

declare @objname nvarchar(776)        -- The object we want size on. 

declare @updateusage varchar(5)             -- Param. for specifying that 

create table #temp1 



       表名              varchar(200) null, 

       行数               char(11) null, 

       保留空间        varchar(15) null, 

       数据使用空间       varchar(15) null, 

       索引使用空间       varchar(15) null, 

        未用空间          varchar(15) null 



--select @objname='N_dep'                               -- usage info. should be updated. 

select @updateusage='false' 

/*Create temp tables before any DML to ensure dynamic 

**  We need to create a temp table to do the calculation. 

**  reserved: sum(reserved) where indid in (0, 1, 255) 

**  data: sum(dpages) where indid  2 + sum(used) where indid = 255 (text) 

**  indexp: sum(used) where indid in (0, 1, 255) - data 

**  unused: sum(reserved) - sum(used) where indid in (0, 1, 255) 

*/ 

declare cur_table cursor for 

  select name from sysobjects where type='u' 

Open cur_table 

fetch next from cur_table into @objname 

While @@FETCH_STATUS=0 

begin 

create table #spt_space 



       rows              int null, 

       reserved    dec(15) null, 

       data        dec(15) null, 

       indexp             dec(15) null, 

       unused             dec(15) null 



/* 

**  Check to see if user wants usages updated. 

*/ 

if @updateusage is not null 

       begin 

              select @updateusage=lower(@updateusage) 

              if @updateusage not in ('true','false') 

                     begin 

                            raiserror(15143,-1,-1,@updateusage) 

                            return(1) 

                     end 

       end 

/* 

**  Check to see that the objname is local. 

*/ 

if @objname IS NOT NULL 

begin 

       select @dbname = parsename(@objname, 3) 

       if @dbname is not null and @dbname > db_name() 

              begin 

                     raiserror(15250,-1,-1) 

                     return (1) 

              end 

       if @dbname is null 

              select @dbname = db_name() 

       /* 

       **  Try to find the object. 

       */ 

       select @id = null 

       select @id = id, @type = xtype 

              from sysobjects 

                     where id = object_id(@objname) 

       /* 

       **  Does the object exist? 

       */ 

       if @id is null 

              begin 

                     raiserror(15009,-1,-1,@objname,@dbname) 

                     return (1) 

              end 

       if not exists (select * from sysindexes 

                            where @id = id and indid  2) 

              if      @type in ('P ','D ','R ','TR','C ','RF') --data stored in sysprocedures 

                            begin 

                                   raiserror(15234,-1,-1) 

                                   return (1) 

                            end 

              else if @type = 'V ' -- View => no physical data storage. 

                            begin 

                                   raiserror(15235,-1,-1) 

                                   return (1) 

                            end 

              else if @type in ('PK','UQ') -- no physical data storage. --?!?! too many similar messages 

                            begin 

                                   raiserror(15064,-1,-1) 

                                   return (1) 

                            end 

              else if @type = 'F ' -- FK => no physical data storage. 

                            begin 

                                   raiserror(15275,-1,-1) 

                                   return (1) 

                            end 

end 

/* 

**  Update usages if user specified to do so. 

*/ 

if @updateusage = 'true' 

       begin 

              if @objname is null 

                     dbcc updateusage(0) with no_infomsgs 

              else 

                     dbcc updateusage(0,@objname) with no_infomsgs 

              print ' ' 

       end 

set nocount on 

/* 

**  If @id is null, then we want summary data. 

*/ 

/*    Space used calculated in the following way 

**       @dbsize = Pages used 

**       @bytesperpage = d.low (where d = master.dbo.spt_values) is 

**    the # of bytes per page when d.type = 'E' and 

**       d.number = 1. 

**    Size = @dbsize * d.low / (1048576 (OR 1 MB)) 

*/ 

if @id is null 

begin 

       select @dbsize = sum(convert(dec(15),size)) 

              from dbo.sysfiles 

              where (status  64 = 0) 

       select @logsize = sum(convert(dec(15),size)) 

              from dbo.sysfiles 

              where (status  64 > 0) 

       select @bytesperpage = low 

              from master.dbo.spt_values 

              where number = 1 

                     and type = 'E' 

       select @pagesperMB = 1048576 / @bytesperpage 

       select  database_name = db_name(), 

              database_size = 

                     ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB'), 

              'unallocated space' = 

                     ltrim(str((@dbsize - 

                            (select sum(convert(dec(15),reserved)) 

                                   from sysindexes 

                                          where indid in (0, 1, 255) 

                            )) / @pagesperMB,15,2)+ ' MB') 

       print ' ' 

       /* 

       **  Now calculate the summary data. 

       **  reserved: sum(reserved) where indid in (0, 1, 255) 

       */ 

       insert into #spt_space (reserved) 

              select sum(convert(dec(15),reserved)) 

                     from sysindexes 

                            where indid in (0, 1, 255) 

       /* 

      ** data: sum(dpages) where indid  2 

       **    + sum(used) where indid = 255 (text) 

       */ 

       select @pages = sum(convert(dec(15),dpages)) 

                     from sysindexes 

                            where indid  2 

       select @pages = @pages + isnull(sum(convert(dec(15),used)), 0) 

              from sysindexes 

                     where indid = 255 

       update #spt_space 

              set data = @pages 

       /* index: sum(used) where indid in (0, 1, 255) - data */ 

       update #spt_space 

              set indexp = (select sum(convert(dec(15),used)) 

                            from sysindexes 

                                   where indid in (0, 1, 255)) 

                         - data 

       /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */ 

       update #spt_space 

              set unused = reserved 

                            - (select sum(convert(dec(15),used)) 

                                   from sysindexes 

                                          where indid in (0, 1, 255)) 

       select reserved = ltrim(str(reserved * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              data = ltrim(str(data * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              index_size = ltrim(str(indexp * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              unused = ltrim(str(unused * d.low / 1024.,15,0) + 

                            ' ' + 'KB') 

              from #spt_space, master.dbo.spt_values d 

              where d.number = 1 

                     and d.type = 'E' 

end 

/* 

**  We want a particular object. 

*/ 

else 

begin 

       /* 

       **  Now calculate the summary data. 

       **  reserved: sum(reserved) where indid in (0, 1, 255) 

       */ 

       insert into #spt_space (reserved) 

              select sum(reserved) 

                     from sysindexes 

                            where indid in (0, 1, 255) 

                                   and id = @id 

       /* 

      ** data: sum(dpages) where indid  2 

       **    + sum(used) where indid = 255 (text) 

       */ 

       select @pages = sum(dpages) 

                     from sysindexes 

                            where indid  2 

                                   and id = @id 

       select @pages = @pages + isnull(sum(used), 0) 

              from sysindexes 

                     where indid = 255 

                            and id = @id 

       update #spt_space 

              set data = @pages 

       /* index: sum(used) where indid in (0, 1, 255) - data */ 

       update #spt_space 

              set indexp = (select sum(used) 

                            from sysindexes 

                                   where indid in (0, 1, 255) 

                                          and id = @id) 

                         - data 

       /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */ 

       update #spt_space 

              set unused = reserved 

                            - (select sum(used) 

                                   from sysindexes 

                                          where indid in (0, 1, 255) 

                                                 and id = @id) 

       update #spt_space 

              set rows = i.rows 

                     from sysindexes i 

                            where i.indid  2 

                                   and i.id = @id 

        insert into #temp1 

       select name = object_name(@id), 

              rows = convert(char(11), rows), 

              reserved = ltrim(str(reserved * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              data = ltrim(str(data * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              index_size = ltrim(str(indexp * d.low / 1024.,15,0) + 

                            ' ' + 'KB'), 

              unused = ltrim(str(unused * d.low / 1024.,15,0) + 

                            ' ' + 'KB') 

       from #spt_space, master.dbo.spt_values d 

              where d.number = 1 

                     and d.type = 'E' 

Drop table #spt_space 

end 

fetch next from cur_table into @objname 

end 

Close cur_table 

DEALLOCATE cur_table 

Select * from #temp1 order by len(数据使用空间) desc,数据使用空间 desc,保留空间 desc 

Drop table #temp1 

return (0) 

end 

GO 

您可能感兴趣的文章:
  • sqlserver 复制表 复制数据库存储过程的方法
  • sql 判断数据库,表,存储过程等是否存在的代码
  • mysql 查询数据库中的存储过程与函数的语句
  • SQLserver 数据库危险存储过程删除与恢复方法
  • MSSQL MySQL 数据库分页(存储过程)
  • SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
  • mysql 导入导出数据库以及函数、存储过程的介绍
  • sqlSQL数据库怎么批量为存储过程/函数授权呢?
  • MSSQL监控数据库的DDL操作(创建,修改,删除存储过程,创建,修改,删除表等)
  • SQL数据库存储过程示例解析

标签:来宾 营口 汕尾 宝鸡 七台河 无锡 邯郸 西宁

巨人网络通讯声明:本文标题《一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed》,本文关键词  一个,查看,MSSQLServer,数据库,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed》相关的同类信息!
  • 本页收集关于一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed的相关信息资讯供网民参考!
  • 推荐文章