• SQL中如何查询各个数据表的大小?<轉>


    代码
    declare @id            int
    declare @type          character(2)                 
    declare @pages         int                        
    declare @dbname        sysname
    declare @dbsize        dec(15,0)
    declare @bytesperpage dec(15,0)
    declare @pagesperMB    dec(15,0)

    create table #spt_space
    (
        
    [objid]         int null,
        
    [rows]          int null,
        
    [reserved]      dec(15null,
        
    [data]          dec(15null,
        
    [indexp]        dec(15null,
        
    [unused]        dec(15null
    )

    set nocount on

    -- Create a cursor to loop through the user   tables

    declare c_tables cursor for
    select id from sysobjects where xtype = 'U'

    open c_tables fetch next from c_tables into @id

    while @@fetch_status = 0
    begin
        
    /* Code from sp_spaceused */
        
    insert into #spt_space (objid, reserved)
        
    select objid = @idsum(reserved)
        
    from sysindexes
        
    where indid in (01255)   and   id = @id
        
        
        
    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
        
    where objid = @id
        
        
    /* index: sum(used) where indid in (0, 1, 255) - data */
        
        
    update #spt_space
        
    set indexp = (select sum(used)
        
    from sysindexes
        
    where indid in (01255)
        
    and id = @id- data
        
    where objid = @id
        
        
    /* 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 (01255and id = @id
                                )
        
    where objid = @id
        
        
    update #spt_space   set [rows] = i.[rows]
        
    from sysindexes i
        
    where i.indid < 2   and i.id = @id    and objid = @id 
        
        
    fetch next from c_tables   into @id

    end

    select TableName = (select left(name,60from sysobjects where id = objid),
            
    [Rows] = convert(char(11), rows),
            ReservedKB 
    = ltrim(str(reserved * d.low / 1024.,15,0+ ' ' + 'KB'),
            DataKB 
    = ltrim(str(data * d.low / 1024.,15,0+ ' ' + 'KB'),
            IndexSizeKB 
    = ltrim(str(indexp * d.low / 1024.,15,0+ ' ' + 'KB'),
            UnusedKB 
    = 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'
    order by reserved desc

    drop table #spt_space
    close c_tables
    deallocate c_tables
    原文地址:http://hi.baidu.com/sjzkingdee/blog/item/f569bc77767f9b11b151b938.html 
     
    版权说明

      如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
      作      者:温景良
      文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

  • 相关阅读:
    【QTP】自动化测试:
    sql基本语句
    【转】ASP.NET网站怎么发布web项目程序和怎么部署
    NHibernate的简单例子
    解决ehcache的UpdateChecker问题
    正则表达式的贪婪与懒惰
    Linux查找文件夹名
    centos安装lxml和pyspider
    如何通过写一个chrome扩展启动本地程序
    网页图片滚动效果
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1758144.html
Copyright © 2020-2023  润新知