zoukankan      html  css  js  c++  java
  • 如何取得一个数据库中所有的表的大小

    一直使用以下的SQL

    SET NOCOUNT ON

    -- Table row counts and sizes.

    CREATE TABLE #t

    (

        [name] NVARCHAR(128),

        [rows] CHAR(11),

        reserved VARCHAR(18),

        data VARCHAR(18),

        index_size VARCHAR(18),

        unused VARCHAR(18)

    )

    INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''

    -- Order by size (need to remove the KB sign).

    SELECT *

    FROM   #t ORDER by cast(SUBSTRING(reserved, 1, LEN(reserved)-2) as Int) desc

    DROP TABLE #t

    但是今天碰到table名中含有schemas,就看上去怪怪的,

    只好改用下面的SQL,还来不及检查发生了什么事,只好头痛医头脚痛医脚

    declare @RowCount int, @tablename varchar(100)

     

    declare @Tables table (

     

    PK int IDENTITY(1,1),

     

    tablename varchar(100),

     

    processed bit

     

    )

     

    INSERT into @Tables (tablename)

     

    SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']' AS TableName

     

    FROM sys.tables order by TABLENAME asc

    declare @Space table (

     

    [id] [int] IDENTITY(1,1) NOT NULL,

     

    name varchar(100), rows nvarchar(100), reserved varchar(100), data char(100), index_size varchar(100), unused varchar(100)

    )

     

    select top 1 @tablename = tablename from @Tables where processed is null

     

    SET @RowCount = 1

     

    WHILE (@RowCount <> 0)

     

    BEGIN

    print @tablename

     

    insert into @Space exec sp_spaceused @tablename

     

    update @Space set name = @tablename where id = (select top 1 MAX(id) as no from @Space)

     

    update @Tables set processed = 1 where tablename = @tablename

     

    select top 1 @tablename = tablename from @Tables where processed is null

     

    SET @RowCount = @@RowCount

     

    END

    update @Space set data = replace(data, 'KB', '')

     

    update @Space set data = cast(data as decimal(10,0)) / 1000

     

    update @Space set data = cast(data as decimal(10,2))

     

    update @Space set reserved = replace(reserved, 'KB', '')

     

    update @Space set reserved = cast(reserved as decimal(10,0)) / 1000

     

    update @Space set reserved = cast(reserved as decimal(10,2))

     

    select name as Tablename, rows, replace(data,' ','') + 'MB' as used, replace(reserved,' ','') + 'MB' as [Reserved] ,index_size,unused from @Space order by convert(decimal(10,2),data) desc

     

  • 相关阅读:
    USB 之传输编码格式 NRZI 介绍
    ubuntu 14.04 安装中文输入法
    uart 超声波传感器数据读取
    Embarcadero Delphi 7 Lite 7.0.4.453 中文版
    Delphi连接Oracle控件ODAC的安装及使用
    ODAC 安裝 (11.2.4)
    Sql中CHARINDEX用法
    DELPHI 数据库控件心得
    delphi uniDac
    Delphi连接Oracle控件ODAC的安装及使用
  • 原文地址:https://www.cnblogs.com/by1455/p/2139443.html
Copyright © 2011-2022 走看看