The following script provides an educated guess regarding database growth
It does this by examining the size of backups. It queries MSDB for backup sizes, calculated the difference, divided by the number of days in between, and finally averages the difference.
/* DESCRIPTION Estimate Database growth based on backups. Assuming backup size grows at the same rate as the Database size. First calculate difference in size between backups, and then divides it by the number of days the backup took place Finaly, averages the result. CONFIGURATION Set @LastXday to limit the number of days to search for Set @dbname for the database Compatibility list: MSSQL2005 MSSQL2008 MSSQL2012 */ declare @dbname varchar(500) declare @LastXdays nvarchar(2) set @dbname = 'AdventureWorks' set @LastXdays = '150' ;WITH BK_Growth (BKsize,BKDate,rownumber) as( SELECT backup_size ,backup_start_date ,row_number() OVER (ORDER BY database_name, [type], backup_start_date DESC) AS rownumber FROM msdb.dbo.backupset WHERE database_name like @dbname and DATEDIFF(dd,([backup_finish_date]),GETDATE()) < @LastXdays and type = 'D' ) select @dbname 'dbname' ,CAST( CAST(avg(100*(( (prev.BKSize - cur.BKSize)/cur.BKSize)/(DATEDIFF(dd,cur.BKDate,Prev.BKDate)) )) as NUMERIC(5,3)) as VARCHAR(5))+' %' 'Average Daily Growth' , (CAST(mfrows.RowSize AS FLOAT)*8)/1024 RowSizeMB , (CAST(mflog.LogSize AS FLOAT)*8)/1024 LogSizeMB from BK_Growth cur inner join BK_Growth prev on CUR.rownumber = (PREV.rownumber+1) cross apply sys.databases db LEFT JOIN ( SELECT database_id, SUM(size) RowSize FROM sys.master_files WHERE type = 0 and database_id = DB_ID(@DBName) GROUP BY database_id, type ) mfrows ON mfrows.database_id = db.database_id LEFT JOIN ( SELECT database_id, SUM(size) LogSize FROM sys.master_files WHERE type = 1 and database_id = DB_ID(@DBName) GROUP BY database_id, type ) mflog ON mflog.database_id = db.database_id WHERE mfrows.RowSize is not null GROUP BY mfrows.RowSize, mflog.LogSize