I need to determine the available space on the drive where my database lives.
I know about the xp_fixeddrives
procedure but how do I get the info for the specific drive where my database resides?
Asked
Active
Viewed 2.2k times
5
-
The database choice is under my control so will be SQL Server 2005 or later. – Ries Feb 11 '10 at 09:08
3 Answers
11
Something like this?
declare @DatabaseName sysname
set @DatabaseName = 'master'
declare @Drive table(DriveName char, FreeSpaceInMegabytes int)
insert @Drive execute xp_fixeddrives
select
mas.type_desc FileType,
mas.name FileName,
mas.physical_name PhysicalFileName,
mas.size * 8 / 1024 FileSizeInMegabytes,
drv.DriveName,
drv.FreeSpaceInMegabytes
from sys.master_files mas
left join @Drive drv on
left(mas.physical_name, 1) = drv.DriveName
where database_id = db_id(@DatabaseName)
Set @DatabaseName
accordingly.

Alex Aza
- 76,499
- 26
- 155
- 134
8
SELECT Drive
, TotalSpaceGB
, FreeSpaceGB
, PctFree
, PctFreeExact
FROM
(SELECT DISTINCT
SUBSTRING(dovs.volume_mount_point, 1, 10) AS Drive
, CONVERT(INT, dovs.total_bytes / 1024.0 / 1024.0 / 1024.0) AS TotalSpaceGB
, CONVERT(INT, dovs.available_bytes / 1048576.0) / 1024 AS FreeSpaceGB
, CAST(ROUND(( CONVERT(FLOAT, dovs.available_bytes / 1048576.0) / CONVERT(FLOAT, dovs.total_bytes / 1024.0 /
1024.0) * 100 ), 2) AS NVARCHAR(50)) + '%' AS PctFree
, CONVERT(FLOAT, dovs.available_bytes / 1048576.0) / CONVERT(FLOAT, dovs.total_bytes / 1024.0 / 1024.0) * 100 AS PctFreeExact
FROM sys.master_files AS mf
CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) AS dovs) AS DE

babs2u2
- 81
- 1
- 2
1
You haven't mentioned your version of SQL Server. Starting with SQL Server 2005 you can get plenty of information from sys.database_files and relate that to the output of xp_fixeddrives.

Frank Kalis
- 1,322
- 9
- 8