Wenn in einer Datenbank ausführen, die folgende Gibt die Zeilenanzahl der Tabelle und den Index/die gesamte Speicherplatzbelegung zurück.
declare @tableName varchar(100);
create table
#table
(
tablename sysname,
row_count int,
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
);
create table
#table2
(
tableName varchar(100),
row_count int,
data_size int,
index_size int,
reserved int,
unused int
);
declare C_T cursor fast_forward for
select TableName = '[' + s.name + '].[' + t.name + ']'
from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id
where t.type = 'U'
order by s.name,
t.name;
open C_T;
fetch next from C_T into @tableName;
while @@FETCH_STATUS = 0
begin
truncate table #table;
insert into #table
exec sp_spaceused @tableName, false;
insert into #table2(tableName, row_count, data_size, index_size, reserved, unused)
select @tableName,
row_count,
convert(int, replace(data, ' KB', '')),
convert(int, replace(index_size, ' KB', '')),
convert(int, replace(reserved, ' KB', '')),
convert(int, replace(unused, ' KB', ''))
from #table;
fetch next from C_T into @tableName;
end
close C_T;
deallocate C_T;
select [Table Name] = tableName,
[Rows] = row_count,
[Data Size (KB)] = data_size,
[Indexes Size (KB)] = index_size,
[Reserved Space (KB)] = reserved,
[Unused Space (KB)] = unused
from #table2
order by data_size desc;
drop table #table;
drop table #table2;
Das funktioniert perfekt ... danke. – Patrick
Gah, hässliche Join-Syntax :( –
Verwenden Sie die Systemtabellen sysobjects und sysindexes nicht mehr - bitte! Sie werden bald veraltet sein und SQL Server 2005 führte das neue Schema "sys" ein, das alle erforderlichen Views - sys enthält. Tabellen, sys.indexes und mehr - verwenden Sie diese stattdessen! –