zoukankan      html  css  js  c++  java
  • 查询sqlserver数据库及各表格空间利用情况

    点击下载详细的说明查询sqlserver数据库及各表格空间利用情况

    查询sqlserver数据库及各表格空间利用情况

     

    1exec sp_spaceused 查询数据库空间利用情况

    2exec sp_spaceused 'byscurrent'   //查询表格的空间利用情况

    篇主要实现查看sql server中每个表占用的空间大小以及数据库的使用情况。在学习游标的也可以看看,里边用到了游标。

    实现思路为:

    1.找到库中所有的表

    2.遍历表名,如果是用户表的话。执行存储过程 sp_spaceused 结果如下:

    3.执行存储过程sp_executesql,将每个表的信息插入结果存储表 tablespaceinfo.

    4.4.执行查询,得到我们想要的结果。

    整个程序为:

    --判断是否存在结果存储表[tablespaceinfo]。如果不存在,则创建

    if not exists

    (

       select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1

    )

    create table tablespaceinfo

    (

       nameinfo varchar(50),      --表的名字

       rowsinfo int ,             --表的行数

       reserved varchar(20) ,     --表保留的行数

       datainfo varchar(20) ,     --数据量大小

       index_size varchar(20) ,   --索引大小

       unused varchar(20)         --没有被占用的空间

    )

     

    delete from tablespaceinfo --清空原有数据表

     

    declare @tablename varchar(255) --表名称 变量

     

     

     

    --申明游标 取出库中所有表名

     

    DECLARE Info_cursor CURSOR FOR 

     

    select o.name from dbo.sysobjects as o where OBJECTPROPERTY(o.id, N'IsTable') = 1 and o.name not like N'#%%' order by o.name

     

     

    OPEN Info_cursor

    FETCH NEXT FROM Info_cursor

    INTO @tablename

     

    WHILE @@FETCH_STATUS = 0

    BEGIN

    --如果是用户表

    if exists 

    (

       select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1

    )

     

    --说明:sp_executesql 执行可以多次重复使用或动态生成的Transact-SQL 语句或批处理

     

    -- sp_spaceused 显示行数、保留的磁盘空间以及当前数据库中的表、索引视图

     

    -- Service Broker 队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。

     

    --execute sp_executesql N'insert into tablespaceinfo exec sp_spaceused @tbname',N'@tbname varchar(255)',@tbname = @tablename

     

    insert into tablespaceinfo exec sp_spaceused @tablename

    -- 两种方法是一样的,理论上前者更快

     

    FETCH NEXT FROM Info_cursor

    INTO @tablename

    END

     

    CLOSE Info_cursor --闭关游标

     

    DEALLOCATE Info_cursor   --释放游标

     

    GO

     

    --显示数据库信息

    sp_spaceused @updateusage = 'TRUE'

     

    --显示表信息

    select * from tablespaceinfo order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc

     

     

     

    --N的作用就是如果你的操作系统是简体中文,你在N后面的单引号里输入了日本、德文、法文什么的,能保证你的字符串是正确的,这时N就要必写;

    --反之如果N后面的单引号里只有英文和简体中文(长度不能超过十几K),那这个N写与不写是一样的。

  • 相关阅读:
    [debug]重定义默认參数
    UVA 1329 Corporative Network【并查集】
    fork同一时候创建多个子进程的方法
    CSS3弹性布局内容对齐(justify-content)属性使用具体解释
    python监控linux性能以及进程消耗的性能
    Android实战简易教程-第十三枪(五大布局研究)
    Linux 截图
    (hdu step 7.1.6)最大三角形(凸包的应用——在n个点中找到3个点,它们所形成的三角形面积最大)
    【SPOJ-GSHOP】Rama and Friends【贪心】【细节】
    【编程题目】在字符串中找出连续最长的数字串,并把这个串的长度返回
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/2183065.html
Copyright © 2011-2022 走看看