zoukankan      html  css  js  c++  java
  • SQL Server 查询 数据库 & 表格 大小

    注意:生产环境请谨慎操作,建议先在测试环境进行测试验证。

    数据库

    ----查询当前数据库大小

    exec sp_spaceused
    

    ----批量查询所有数据库大小

    with fs
    
    as
    
    (
    
        select database_id, type, size * 8.0 / 1024 size
    
        from sys.master_files
    
    )
    
    select 
    
        name,
    
        (select   cast(round(sum(size),2)   as   numeric(15,2))  from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeMB,
    
        (select cast(round(sum(size),2)   as   numeric(15,2))  from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeMB
    
    from sys.databases db
    
    order by 2 desc;
    

    在这里插入图片描述

    表格

    ----查询单个表格大小

    exec sp_spaceused '【表名】'//将【表名】替换为需要查询表的名称
    

    ----批量查询数据库中各表的大小
    方法一:
    (注:亦适用于含多种架构表的数据库)

    declare @table_spaceused table 
    (name nvarchar(100) 
    ,rows int 
    ,reserved nvarchar(100) 
    ,data nvarchar(100) 
    ,index_size nvarchar(100) 
    ,unused nvarchar(100) ) 
    
    insert into @table_spaceused 
    (name,rows,reserved,data,index_size,unused ) 
    exec sp_MSforeachtable 
    @command1='exec sp_spaceused ''?''' 
    
    select * from @table_spaceused
    

    sp_MSforeachtable使用方法可参考链接:sp_MSforeachtable使用方法可参考链接:文章链接

    方法二:
    (注:不适用于含多种架构表的数据库)

    DECLARE @tablespaceinfo TABLE (
        nameinfo VARCHAR(50),
        rowsinfo INT,
        reserved VARCHAR(20),
        datainfo VARCHAR(20),
        index_size VARCHAR(20),
        unused VARCHAR(20)
    )
    
    DECLARE @tablename VARCHAR(255);
    
    DECLARE Info_cursor CURSOR FOR
        SELECT '['+[name]+']' FROM sys.tables WHERE TYPE='U';
    
    OPEN Info_cursor
    FETCH NEXT FROM Info_cursor INTO @tablename
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO @tablespaceinfo EXEC sp_spaceused @tablename
        FETCH NEXT FROM Info_cursor
        INTO @tablename
    END
    
    CLOSE Info_cursor
    DEALLOCATE Info_cursor
    
    SELECT * FROM @tablespaceinfo
    ORDER BY Cast(Replace(reserved,'KB','') AS INT) DESC
    

    在这里插入图片描述
    方法三:
    (注:不适用于含多种架构表的数据库)

    --列表输出
    SET   NOCOUNT   ON
    DECLARE   @db   VARCHAR(20)
    
    --获取当前数据库
    SET   @db=db_name()
    DBCC   UPDATEUSAGE(@db)   WITH   NO_INFOMSGS
    GO
    
    --创建临时表
    CREATE   TABLE   #tblSpace
    (
    数据表名称   varchar(250)   null,
    记录笔数   int   null,
    保留空间   varchar(15)   null,
    数据使用空间   varchar(15)   null,
    索引使用空间   varchar(15)   null,
    未使用空间   varchar(15)   null
    )
    DECLARE   @tblname   varchar(250)
    DECLARE   curTbls   CURSOR   FOR
    SELECT   name   FROM   sysobjects 
    --BASE TABLE很重要
    WHERE   type='U'
    
    OPEN   CurTbls
    FETCH   NEXT   FROM   curTbls   INTO   @tblName
    
    WHILE   @@FETCH_STATUS=0
    BEGIN
    INSERT   #tblSpace   EXEC   sp_spaceused   @tblName
    FETCH   NEXT   FROM   curTbls   INTO   @tblName
    END
    CLOSE   CurTbls
    DEALLOCATE   curTbls
    
    SELECT   *   FROM   #tblSpace   ORDER   BY   记录笔数   DESC
    
    --删除表格
    DROP   TABLE   #tblSpace
    
  • 相关阅读:
    bzoj 1013: [JSOI2008]球形空间产生器sphere
    bzoj 1012: [JSOI2008]最大数maxnumber
    bzoj 1010: [HNOI2008]玩具装箱toy
    bzoj 1008: [HNOI2008]越狱
    bzoj 1007: [HNOI2008]水平可见直线
    UVa12105 越大越好
    POJ
    最优点配对问题(紫书)
    Ned 的难题
    UVA
  • 原文地址:https://www.cnblogs.com/ruishine/p/14358303.html
Copyright © 2011-2022 走看看