zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    如何使用jackson美化输出json/xml
    使用Jackson在Java中处理JSON
    用 Jackson 来处理 JSON
    writeValueAsString封装成工具类
    周鸿袆:360回归是出于国家安全考虑(硬件有硬件独特的规律,硬件不可能有很高的利润,核心的价值还是硬件背后承载的软件和云端的服务)
    Unicode 7.0.1中文支持非常好
    六个编程范型将改变你对编程的看法(好多奇怪的语言和奇怪的想法)
    delphi多版本安装方法
    UAC就不能一次添加、永久信任吗?
    数学符号及读法大全
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1758144.html
Copyright © 2011-2022 走看看