Získání informací o velikosti všech tabulek v databázi

SQL Server Management Studio umí informace o velikosti jednotlivých tabulek zobrazit v podobě krásného reportu. Nicméně jak si poradit, pokud chcete tyto informace zobrazit pomocí vlastní aplikace, nebo pokud máte k dispozici pouze SQL Server 2000?

Řešením je níže prezentovaná uložená procedura TableStatistics:

CREATE PROCEDURE [dbo].[TableStatistics]

AS

BEGIN

    SET NOCOUNT ON

 

    -- Create the temporary table

    CREATE TABLE #TableStatistics (

       name              nvarchar(100),

       rows              int,

       reserved          varchar(18),

       reserved_int      int default(0),

       data              varchar(18),

       data_int          int default(0),

       index_size        varchar(18),

       index_size_int    int default(0),

       unused            varchar(18),

       unused_int        int default(0)

    )

    -- Populate table

    EXEC sp_MSforeachtable @command1="INSERT INTO #TableStatistics (name,rows,reserved,data,index_size,unused) EXEC sp_spaceused '?'"

 

    -- Return converted values

    SELECT

        name AS Name,

        rows AS Rows,

        CAST(SUBSTRING(reserved, 1, CHARINDEX(' ', reserved)) AS int) AS Reserved,

        CAST(SUBSTRING(data, 1, CHARINDEX(' ', data)) AS int) AS Data,

        CAST(SUBSTRING(index_size, 1, CHARINDEX(' ', index_size)) AS int) AS IndexSize,

        CAST(SUBSTRING(unused, 1, CHARINDEX(' ', unused)) AS int) AS Unused

    FROM #TableStatistics ORDER BY Name

 

    -- Delete the temporary table

    DROP TABLE #TableStatistics

END

Jejím výstupem je resultset, který obsahuje pro každou tabulku v databázi následující údaje:

  • Name - název tabulky
  • Rows - počet řádků
  • Reserved - velikost prostoru, který je pro tabulku rezervován (v kB)
  • Data - objem v kB, který skutečně zabírají data
  • IndexSize - objem v kB, který skutečně zabírají indexy
  • Unused - nevyužitý objem v kB 
  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET