Run sp_spacedused for each database:
--temporary table to hold database names
CREATE TABLE #Databases (name varchar(255))
INSERT INTO #Databases
SELECT name FROM master..sysdatabases
DECLARE abc CURSOR FOR
SELECT name FROM #Databases
DECLARE @name varchar(255)
DECLARE @sql nvarchar(1024)
OPEN abc
FETCH NEXT FROM abc INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
--build sql to switch to that database...
SET @sql = 'USE '+@name
PRINT @sql
EXECUTE (@sql)
--and run spaceused on it
SET @sql = 'EXECUTE sp_spaceused @UpdateUsage=True'
PRINT @sql
EXECUTE (@sql)
FETCH NEXT FROM ABC INTO @name
END
CLOSE abc
DEALLOCATE abc
DROP TABLE #Databases
Sample singular results
Execute T-SQL:
USE Contoso
EXECUTE sp_spaceused @UpdateUsage=True
Results:
database_name: Contoso
database_size: 85.13 MB
unallocated_space: 15.41 MB
reserved: 70,368 KB (68.7 MB)
data: 42,944 KB (41.9 MB)
index_size: 24,200 KB (23.6 MB)
unused: 3,224 KB ( 3.1 MB)
Shrink:
DBCC SHRINKDATABASE (Contoso)
Check space again:
EXECUTE sp_spaceused @UpdateUsage=True
Results:
database_name: Contoso
database_size: 69.81 MB
unallocated_space: 0.20 MB
reserved: 70,256 KB (68.6 MB)
data: 43,024 KB (42.0 MB)
index_size: 24,200 KB (23.6 MB)
unused: 3,032 KB ( 3.0 MB)