Przedstawiam skrypt, który umożliwia wyświtlenie listy wszystkich tabel zawartych, w wybranej bazie danych. W stworzonej tabeli tymczasowej zawarte są następujące pola:
servername - nazwa servera z nazwą instancji,
basename - nazwa bazy danych,
name - nazwa tabeli,
rows - ilość wierszy w tabeli,
reserved - ilość zarezerwowanego miejsca w KB,
data - wielkość danych w KB,
index_size - wilekość indeksów w KB,
unused - wielkość nieużywana w KB
Informacje te uzyskuje się z procedury sp_spaceused.
Skrypt testowany na MS SQL Server 2000, 2008.
kod:
/* --------------------------------------------------------------------------------
Script : ListTableInBase.sql
Author : Dariusz 'DBSoft' Brejnak (c) 2010
Created : 2010-09-01
Skrypt wyświetla listę tabel zawartych w aktualnej bazie danych.
Za pomocą procedura sp_spaceused
zwracane są informacje o liczbie wierszy, wielkości plików bazy danych
w KB lub obiektów bazodanowych i liczbie pustych stron w
poszczególnych plikach.
wynik:
servername basename name rows reserved data index_size unsed
MSSQLEXPRESS AdventureWorks Address 19614 4984 2224 2472 288
MSSQLEXPRESS AdventureWorks AddressType 6 48 8 40 0
MSSQLEXPRESS AdventureWorks AWBuildVersion 1 16 8 8 0
........
*/
use ala
CREATE TABLE #tmp
(
[name] varchar(50),
[rows] int,
[reserved] varchar (20),
[data] varchar (20),
[index_size]varchar(20),
[unsed] varchar(20)
)
CREATE TABLE #tmprows
(
[servername] varchar(50),
[basename] varchar(50),
[name] varchar(50),
[rows] int,
[reserved] varchar (20),
[data] varchar (20),
[index_size]varchar(20),
[unsed] varchar(20)
)
INSERT #tmp EXEC sp_MSforeachtable 'exec sp_spaceused ''?'''
INSERT #tmprows SELECT @@SERVERNAME,
DB_NAME(),
[name],
[rows],
replace(reserved,'KB',''),
replace(data,'KB',''),
replace(index_size,'KB',''),
replace(unsed,'KB','')
FROM #tmp
SELECT [servername],
[basename],
[name],
[rows],
[reserved],
[data],
[index_size],
[unsed]
FROM #tmprows
ORDER BY [name]
DROP TABLE #tmp
DROP TABLE #tmprows
--