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