Um von einer Datenbank die Grösse und Anzahl Einträge jeder Tabelle aufzulisten folgende StoredProcedure.
CREATE PROCEDURE [dbo].[getTableSizes]
AS
SET NOCOUNT ON
-- benötigte Variablen deklarieren
DECLARE @sql VARCHAR(128)
DECLARE @tname VARCHAR(128)
-- temporäre Tabelle für Tabellennamen erzeugen...
CREATE TABLE #tmpTables(tName VARCHAR(128))
-- ... und befüllen
SELECT @sql = 'INSERT #tmpTables '
+ 'SELECT table_name FROM INFORMATION_SCHEMA.TABLES '
+ 'WHERE table_type = ''BASE TABLE'''
EXEC (@sql)
-- temporäre Tabelle für Tabelleninformationen erzeugen...
CREATE TABLE #tmpSpaceUsed (
name VARCHAR(128),
rows VARCHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18))
SELECT @tname = ''
-- ... und mit Schleife über Tabellennamen und der System-SP 'sp_spaceused' befüllen
WHILE EXISTS (SELECT * FROM #tmpTables WHERE tName > @tname)
BEGIN
SELECT @tname = MIN(tName) FROM #tmpTables WHERE tName > @tname
SELECT @sql = 'INSERT #tmpSpaceUsed EXEC sp_spaceused ' + @tname + ''
EXEC (@sql)
END
-- Informationen über Systemtabellen anfügen
INSERT #tmpSpaceUsed EXEC sp_spaceused sysobjects
INSERT #tmpSpaceUsed EXEC sp_spaceused sysindexes
INSERT #tmpSpaceUsed EXEC sp_spaceused syscolumns
INSERT #tmpSpaceUsed EXEC sp_spaceused systypes
INSERT #tmpSpaceUsed EXEC sp_spaceused syscomments
INSERT #tmpSpaceUsed EXEC sp_spaceused sysfiles1
INSERT #tmpSpaceUsed EXEC sp_spaceused syspermissions
INSERT #tmpSpaceUsed EXEC sp_spaceused sysusers
INSERT #tmpSpaceUsed EXEC sp_spaceused sysproperties
INSERT #tmpSpaceUsed EXEC sp_spaceused sysdepends
INSERT #tmpSpaceUsed EXEC sp_spaceused sysreferences
INSERT #tmpSpaceUsed EXEC sp_spaceused sysfulltextcatalogs
INSERT #tmpSpaceUsed EXEC sp_spaceused sysindexkeys
INSERT #tmpSpaceUsed EXEC sp_spaceused sysforeignkeys
INSERT #tmpSpaceUsed EXEC sp_spaceused sysmembers
INSERT #tmpSpaceUsed EXEC sp_spaceused sysprotects
INSERT #tmpSpaceUsed EXEC sp_spaceused sysfulltextnotify
INSERT #tmpSpaceUsed EXEC sp_spaceused sysfiles
INSERT #tmpSpaceUsed EXEC sp_spaceused sysfilegroups
-- Ausgabe des Resultsets
SELECT * FROM #tmpSpaceUsed order by cast([rows] as integer) desc
-- Löschen der temporären Tabellen
DROP TABLE #tmpTables
DROP TABLE #tmpSpaceUsed
GO
Thursday, March 09, 2006 6:38 PM