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
  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/kelly1314/p/10873621.html
Copyright © 2011-2022 走看看