1

Does anyone know how the Database Name can be returned? I can't seem to figure out how to join sys.database_files to sys.databases.

SELECT
    a.NAME as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
FROM 
    sys.database_files a
LEFT JOIN sys.filegroups FG ON 
    FG.data_space_id = a.data_space_id
shA.t
  • 16,580
  • 5
  • 54
  • 111
Philip
  • 2,460
  • 4
  • 27
  • 52
  • 1
    this seems helpfull:https://stackoverflow.com/questions/9630279/listing-information-about-all-database-files-in-sql-server – TheGameiswar Sep 19 '17 at 06:17
  • 3
    `sys.database_files` returns files from the current database - not all databases. So `select db_name()` unless you are calling it with a three part name... – Martin Smith Sep 19 '17 at 06:19

2 Answers2

4

Use sys.master_files instead - that has database_id - like this:

select 
    a.NAME as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
from sys.master_files a
LEFT JOIN sys.filegroups FG ON 
    FG.data_space_id = a.data_space_id;

Edit :
To add database name to the query:

select 
    d.name as DatabaseName,
    a.name as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
from sys.databases d
left join sys.master_files a on d.database_id = a.database_id
left join sys.filegroups FG on
    FG.data_space_id = a.data_space_id;
shA.t
  • 16,580
  • 5
  • 54
  • 111
0
SELECT a.NAME as FileName ,b.name as FileGroup , b.physical_name as FilePath,   b.type_desc as FileType,
CONVERT(DECIMAL(12,2),ROUND(b.size/128.000,2)) AS [Size],
CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(b.name,'SpaceUsed')/128.000,2)) AS [Used] ,
CONVERT(DECIMAL(12,2),ROUND((b.size-FILEPROPERTY(b.name,'SpaceUsed'))/128.000,2)) AS [Free]
FROM Sys.databases a 
INNER JOIN  Sys.master_files b ON a.database_id=b.database_id
WHERE a.database_id >4
Alfaiz Ahmed
  • 1,698
  • 1
  • 11
  • 17