Aqui está um bom roteiro que eu descaradamente rasguei daqui :
use [Insert DB Name]
select
a.FILEID,
[FILE_SIZE_MB] =
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a
Isso é bom porque fornecerá o espaço livre em cada arquivo do banco de dados (você pode ter vários arquivos e talvez alguém o configure para colocar alguns objetos em cada um), bem como o tamanho livre.
Por exemplo, você tem um arquivo de dados de 4 GB com 3 GB de espaço livre. Talvez você tenha 1 MDF sem muitos dados, mas um NDF com muitos dados. Essa consulta informará o tamanho livre de cada arquivo e para qual banco de dados esse arquivo está alocado. Lembre-se de adicionar todos os 'SPACE_USED_MB' para cada banco de dados para obter o tamanho total.
Boa sorte!
Edit:
Removido um comando não suportado e de buggy que eu pensei que poderia sair publicando aqui para esta consulta. :(