This procedure displays amount of disk space used by database per directories.
This procedure displays amount of disk space used by database per directories.
/************************************************************************
*
* Author: Rafal Skotak
* Purpose: Procedure displays amount of disk space used by databases per directories
* Date: 2008-01-14
*
************************************************************************/
if exists(select * from sysobjects where id = object_id('dbo.proc_get_db_files_size') and xtype = 'P')
drop procedure dbo.proc_get_db_files_size
go
create procedure dbo.proc_get_db_files_size
as
begin
set nocount on
create table #temp_result_table
(
[rec_id] int identity(1, 1) primary key,
[db_name] sysname not null,
[files_size] int not null,
[directory] nvarchar(1024) not null
);
create table #temp_dbs_table
(
[db_name]sysname not null primary key,
);
insert into #temp_dbs_table ([db_name]) select [name] from master..sysdatabases
declare @db_name sysname
set @db_name = ''
while @db_name is not NULL
begin
set @db_name = NULL
select @db_name = [db_name] from #temp_dbs_table
if @db_name is NULL
break
declare @n_cmd nvarchar(4000)
set @n_cmd = 'insert into #temp_result_table ([db_name], [files_size], [directory]) select ''' + @db_name + ''', size * 8, reverse(ltrim(rtrim(filename))) from [' + @db_name + ']..sysfiles'
exec sp_executesql @n_cmd
delete from #temp_dbs_table where [db_name] = @db_name
end
drop table #temp_dbs_table
update 
#temp_result_table 
set 
[directory] = reverse
(
substring
(
[directory], charindex('\', [directory], 0), len([directory])
)
)
select 
[db_name], 
[directory], 
sum([files_size]) as [files_size] 
from 
#temp_result_table
group by
[db_name],
[directory]
order by
[db_name],
[directory]
drop table #temp_result_table
end
go
-- example :
exec dbo.proc_get_db_files_size