I have the following query to get the size of tables in all databases.
DECLARE @DBName varchar(200)
DECLARE @CMD varchar(max)
DECLARE @TV TABLE ( name_table varchar(500),ROWSCOUNT int, reserveder varchar(50), datasize varchar(50), indexsize varchar(50), unused varchar(50))
declare @tv2 table ( DBName varchar(200),name_table varchar(500),ROWSCOUNT int, reserved varchar(50), datasize float, indexsize varchar(50), unused varchar(50))
DECLARE @TV3 TABLE ( DBName varchar(200),SchemaTAble varchar(500), TableName varchar(200))
DECLARE C Cursor for select quotename(name) as dbname from sys.databases where name <> 'tempdb' and state = 0
OPEN C
FETCH NEXT FROM C INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM @TV3
SET @CMD =
@DBName+'..sp_MSforeachtable ''exec sp_spaceused [?]'''
insert into @TV
EXEC (@CMD)
SET @CMD = 'select '''+@DBName+''' as DatabaseName, quotename(s.name)+''.''+quotename(t.name) as SchemaTable, quotename(t.name) TableName from '+@DBName+'.sys.tables t inner join '+@DBName+'.sys.schemas s on s.schema_id = t.schema_id '
insert into @TV3
EXEC (@CMD)
insert into @TV2
select @DBName ,t.name_table,t.ROWSCOUNT,round(cast(replace(t.reserveder,' kb','')as float)/1024,2),round(cast(replace(t.datasize,' kb','') as float)/1024,2),t.indexsize,t.unused from @TV t
inner join @TV3 s on quotename(t.name_table) = s.TableName and s.DBName = @DBName
FETCH NEXT FROM C INTO @DBNAME
END
CLOSE C
DEALLOCate C
select DBname+','+cast(datasize as varchar(20))+','+cast(round(cast(replace(IndexSize,' kb','')as float)/1024,2)as varchar(20))+','+cast(round(cast(replace(unused,' kb','')as float)/1024,2)as varchar(20))+','+name_table +','+cast(reserved as varchar(20))+','+'mssql'+','+cast(ROWSCOUNT as varchar(20))+','+cast(current_timestamp as varchar(20)) from @TV2 order by datasize desc
But the query returns duplicate records in my production server.
E.g
[BookingDB],28027.7,4565.87,0,booking_details,32591.1,mssql,118800560,Feb
28 2017 12:29PM
[BookingDB_Lo],28027.7,4565.87,0,booking_details,32591.1,mssql,118800560,Feb
28 2017 12:29PM
[BookingDB_FT],28027.7,4565.87,0,booking_details,32591.1,mssql,118800560,Feb
28 2017 12:29PM
[BookingDB_RC],28027.7,4565.87,0,booking_details,32591.1,mssql,118800560,Feb
28 2017 12:29PM
Here the datas of same tables showing in different databases.Kindly help me to resolve this issue.