Update 2012.05.24: igazság szerint van egy újabb lekérdezés, ami sokkal jobb... itt érhető el: http://www.iamberke.com/post/2012/03/05/Adatbazisok-meretenek-lekerdezese.aspx
Ma többen is kértek tőlem egy listát, hogy egy-egy szerveren melyik adatbázis mennyi helyet foglal. Az alábbi script megadja a választ:
USE msdb;
GO
IF EXISTS (SELECT 1 FROM sys.objects WHERE [type] = 'U' AND [object_id] = OBJECT_ID('[dbo].[scsDatabaseSize]'))
DROP TABLE [dbo].[scsDatabaseSize];
GO
CREATE TABLE [dbo].[scsDatabaseSize]
(
[DbName] nvarchar(255),
[DataFile] bigint,
[LogFile] bigint
)
DECLARE @DbName nvarchar(255);
DECLARE DB CURSOR FOR
SELECT [name] FROM sys.databases;
OPEN DB;
FETCH NEXT FROM DB INTO @DbName;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [DataFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''ROWS'' ');
EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [LogFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''LOG'' ');
FETCH NEXT FROM DB INTO @DbName;
END
CLOSE DB;
DEALLOCATE DB;
SELECT
[DbName] AS [Database Name],
SUM([DataFile]) AS [Data size (Kb)],
SUM([LogFile]) AS [Log size (Kb)]
FROM
[dbo].[scsDatabaseSize]
GROUP BY
[DbName]
--cleanup
DROP TABLE [dbo].[scsDatabaseSize];
A script DMV-ket használ, a régi SQL 2000-es sys táblákat, mint pl a sysaltfiles nem használom.