• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed
    运行下面存储过程

    然后直接使用 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数据库存储过程示例解析
    上一篇:访问和更改关系数据,使用MSSQL外联接
    下一篇:SQL语句去掉重复记录,获取重复记录
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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