posted 5/23/2012 by Maxui - Views: [1177]
I often need to know how much free space is available on a drive before and after a cube has been updated.
The code below returns a table with Total and Free space per drive.
It relies on OLE Automation procedures being configured correctly.
SET NOCOUNT ONDECLARE @hr INTDECLARE @fso INTDECLARE @drive CHAR(1)DECLARE @odrive INTDECLARE @TotalSize VARCHAR(20)DECLARE @MB NUMERIC ;SET @MB = 1048576CREATE TABLE #drives ( drive CHAR(1) PRIMARY KEY, FreeSpace INT NULL , TotalSize INT NULL )INSERT #drives ( drive, FreeSpace )EXEC master.dbo.xp_fixeddrivesEXEC @hr=sp_OACreate'Scripting.FileSystemObject', @fso OUTIF @hr <> 0EXEC sp_OAGetErrorInfo @fsoDECLARE dcur CURSOR LOCAL FAST_FORWARD FORSELECT driveFROM #drivesORDER BY driveOPEN dcurFETCH NEXTFROM dcurINTO @driveWHILE @@FETCH_STATUS=0BEGIN EXEC @hr = sp_OAMethod @fso, 'GetDrive', @odrive OUT, @drive IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr = sp_OAGetProperty @odrive, 'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo @odrive UPDATE #drives SET TotalSize=@TotalSize/@MB WHERE drive =@drive FETCH NEXT FROM dcur INTO @driveENDCLOSE dcurDEALLOCATE dcurEXEC @hr=sp_OADestroy @fsoIF @hr <> 0EXEC sp_OAGetErrorInfo @fsoSELECT drive , TotalSize AS 'Total(MB)', FreeSpace AS 'Free(MB)'FROM #drivesORDER BY driveDROP TABLE #drives