• You might also try this script (if SQL 2005+). It works directly on the SYS tables. You can collapse things down to group on only the object_name and rows if you want. It will show you all tables in a database at once.

    select

    fg.name filegroup_name,

    [object_name],

    i.type_desc index_type,

    x.type_desc alloc_type,

    rows,

    sum(total_pages) total_pages,

    sum(total_pages) * 8192 / 1024 / 1024 total_MB,

    sum(data_pages) data_pages,

    sum(data_pages) * 8192 / 1024 / 1024 data_MB,

    sum(used_pages) used_pages,

    sum(used_pages) * 8192 / 1024 / 1024 used_MB

    from sys.filegroups fg

    inner join

    ( select

    au.data_space_id,

    p.object_id,

    object_name(p.object_id) [object_name],

    p.index_id,

    p.rows,

    au.type_desc,

    au.total_pages,

    au.data_pages,

    au.used_pages

    from sys.partitions p

    inner join sys.allocation_units au on p.hobt_id = au.container_id

    where au.type in(1,3)

    union all

    select

    au.data_space_id,

    p.object_id,

    object_name(p.object_id) [object_name],

    p.index_id,

    p.rows,

    au.type_desc,

    au.total_pages,

    au.data_pages,

    au.used_pages

    from sys.partitions p

    inner join sys.allocation_units au on p.partition_id = au.container_id

    where au.type = 2

    ) x on x.data_space_id = fg.data_space_id

    inner join sys.indexes i on x.object_id = i.object_id and x.index_id = i.index_id

    group by fg.name, x.[object_name], i.type_desc, x.type_desc, rows

    order by 2, 3