zoukankan      html  css  js  c++  java
  • 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    MSDN资料:https://msdn.microsoft.com/zh-cn/library/ms188776.aspx

    查询数据库的大小

    EXEC sp_spaceused
    • 1

    为了保证查询结果的实时性,推荐使用 @updateusage 参数来确保统计数据是最新的

    EXEC sp_spaceused @updateusage = N'TRUE';
    • 1

    具体查询某个表的大小

    EXEC sp_spaceused 't_table'
    • 1

    查询数据库中的所有表的大小

    方法一:

    -- =============================================
    -- 描  述:更新查询数据库中各表的大小,结果存储到数据表中
    -- =============================================
    
    
    CREATE PROCEDURE [dbo].[sp_UpdateTableSpaceInfo]
    AS
    BEGIN
        --查询是否存在结果存储表
        IF NOT EXISTS (SELECT * FROM sysobjects where id = OBJECT_ID(N'temp_tableSpaceInfo') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
        BEGIN
            --不存在则创建
            CREATE TABLE temp_tableSpaceInfo
            (name NVARCHAR(128), 
            rows char(11), 
            reserved VARCHAR(18),
            data VARCHAR(18),
            index_size VARCHAR(18),
            unused VARCHAR(18))
        END
        --清空数据表
        DELETE FROM temp_tableSpaceInfo
    
        --定义临时变量在遍历时存储表名称
        DECLARE @tablename VARCHAR(255)
    
        --使用游标读取数据库内所有表表名
        DECLARE table_list_cursor CURSOR FOR 
        SELECT name FROM sysobjects 
        WHERE OBJECTPROPERTY(id, N'IsTable') = 1 AND name NOT LIKE N'#%%' ORDER BY name
    
        --打开游标
        OPEN table_list_cursor
        --读取第一条数据
        FETCH NEXT FROM table_list_cursor INTO @tablename 
    
        --遍历查询到的表名
        WHILE @@FETCH_STATUS = 0
        BEGIN
            --检查当前表是否为用户表
            IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(@tablename) AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
            BEGIN
                --当前表则读取其信息插入到表格中
                EXECUTE sp_executesql N'INSERT INTO temp_tableSpaceInfo EXEC sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablename
            END
            --读取下一条数据
            FETCH NEXT FROM table_list_cursor INTO @tablename 
        END
    
        --释放游标
        CLOSE table_list_cursor
        DEALLOCATE table_list_cursor
    END
    
    GO
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    使用的时候,执行下面的语句:

    EXEC sp_UpdateTableSpaceInfo
    SELECT * FROM temp_tableSpaceInfo
    • 1
    • 2

    方法二:

    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
  • 相关阅读:
    教你一招Linux下文本比对方法
    Linux下find与exec的联手干大事
    Linux下Shell日期的格式,你知道几种?
    Linux下Python3.6的安装及避坑指南
    多线程中使用CompletableFuture
    ElasticSearch7.6.2中语法使用(更新中)
    ElasticSearch7.6.2使用_update_by_query语法
    ElasticSearch7.6.2使用_delete_by_query产生版本冲突问题
    filebeat7.6.2进程运行一段时间后自动退出问题解决
    把本地项目提交到gitLab
  • 原文地址:https://www.cnblogs.com/kelly1314/p/10873621.html
Copyright © 2011-2022 走看看