爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
当前所在位置:主页 > 数据库 > MsSql >
  • 魔艺客提供SEO\SEM推广整合营销服务
  • 提供整套互联网营销整合方案-魔艺客
  • 魔艺客高端网站建设开发服务十一大优惠服务
  • 资深的网站建设开发经验,一对一服务-魔艺客高
  • 一站式服务,从服务器到网站,三站何以尽在魔
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

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

发布时间:2017-09-11 21:58    作者:爱开发联盟    浏览:次    来源:aikaifa.com.cn 分享:

运行下面存储过程

然后直接使用 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 

网友评论

分类排行榜联系我们

好文推荐联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

当前最新内容联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

在线手册

网站地图导航

前端 HTML/Xhtml HTML5 CSS XML/XSLT Dreamweaver教程 Frontpage教程 心得技巧 编程 JavaScript ASP.NET PHP编程 正则表达式 AJAX相关 ASP编程 JSP编程 Flex 脚本加解密 web2.0 XML/RSS 网页编辑器 相关技巧 安全相关 网页播放器 Dart 其它综合 脚本 VBS DOS/BAT HTA HTC Python perl 游戏相关 vba 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 脚本下载 广告代码 js框架 批处理 网页相关 源码下载 数据库 MsSql Mysql mariadb oracle DB2 mssql2008 mssql2005 SQLite PostgreSQL MongoDB Redis Access 数据库文摘 数据库其它 CMS dedecms ecshop z-blog UcHome UCenter 风讯CMS 科汛cms discuz 新云cms phpwind 动易cms phpcms 帝国cms WordPress drupal 其它cms 设计 photoshop教程 摄影教程 Fireworks教程 CorelDraw教程 Illustrator教程 Painter教程 Freehand教程 Indesign 设计素材 平面其它 微信相关 微信公众号 小程序 操作系统 bios 系统安装 系统进程 Windows系列 LINUX RedHat/Centos Ubuntu/Debian Fedora Solaris 麒麟系统 红旗Linux Unix/BSD 苹果MAC 注册表 其它系统 网站运营 建站经验 微信营销 网站优化 网站策划 网络赚钱 网络创业 站长故事 alexa域名 其它相关 网络安全 黑客教程 安全设置 杀毒防毒 病毒查杀 脚本攻防 黑客入侵 工具使用 业界动态 Exploit 漏洞分析 加密解密 手机黑客 安全其它 在线手册 网页制作 脚本编程 数据库相关 软件编程 系统相关 其它相关 源码下载

友情链接申请加入

51CTO 上海魔艺客 猫鼬设计开发 Erlo网站开发 猫鼬设计工作室 新发现全球资讯 信息安全与IT资讯
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

283882409