— List all tables in a database
— and order by size

dbcc updateusage (0) — Current DB
go

create table Z_TableSize (
TableName varchar(128) not null,
CountOfRows int not null,
Reserved varchar(200) not null,
Data varchar(200) not null,
Index_Size varchar(200) not null,
Unused varchar(200) not null
)
go

set nocount on

declare Diff_Cursor cursor
   for

select [Name] AS TableName
from dbo.sysobjects
where XType = ‘U’ and
 [Name] not in (‘dtProperties’, ‘Z_TableSize’)

declare @TableName nvarchar(128)

open Diff_Cursor

fetch next from Diff_Cursor into @TableName

while @@FETCH_STATUS = 0

begin
 
 insert Z_TableSize exec sp_spaceused @TableName

 fetch next from Diff_Cursor into @TableName
end

close Diff_Cursor

deallocate Diff_Cursor

select TableName, (Data2 / CountOfRows) as AverageRowBytes
from (
select TableName, Data,cast((replace(Data, ‘ KB’, ”)) as int) * 1000 as Data2, CountOfRows
from Z_TableSize
where CountOfRows > 0
) as t1
order by (Data2 / CountOfRows) desc

drop table Z_TableSize

go