SELECT
[a3].[name] AS [schemaname],
[a2].[name] AS [tablename],
[a1].[rows] AS [row_count],
( [a1].[reserved] + ISNULL([a4].[reserved], 0) ) * 8 AS [reserved],
[a1].[data] * 8 AS [data],
( CASE WHEN ( [a1].[used] + ISNULL([a4].[used], 0) ) > [a1].[data] THEN ( [a1].[used] + ISNULL([a4].[used], 0) ) - [a1].[data] ELSE 0 END ) * 8 AS [index_size],
( CASE WHEN ( [a1].[reserved] + ISNULL([a4].[reserved], 0) ) > [a1].[used] THEN ( [a1].[reserved] + ISNULL([a4].[reserved], 0) ) - [a1].[used] ELSE 0 END ) * 8 AS [unused]
FROM ( SELECT [ps].[object_id],
SUM(CASE WHEN ( [ps].[index_id] < 2 ) THEN [ps].[row_count] ELSE 0 END) AS [rows],
SUM([ps].[reserved_page_count]) AS [reserved],
SUM(CASE WHEN ( [ps].[index_id] < 2 ) THEN ( [ps].[in_row_data_page_count] + [ps].[lob_used_page_count] + [ps].[row_overflow_used_page_count] )
ELSE ( [ps].[lob_used_page_count] + [ps].[row_overflow_used_page_count] ) END) AS [data],
SUM([ps].[used_page_count]) AS [used]
FROM [sys].[dm_db_partition_stats] [ps]
GROUP BY [ps].[object_id]
) AS [a1]
LEFT OUTER JOIN ( SELECT [it].[parent_id],SUM([ps].[reserved_page_count]) AS [reserved],SUM([ps].[used_page_count]) AS [used]
FROM [sys].[dm_db_partition_stats] [ps]
INNER JOIN [sys].[internal_tables] [it] ON ( [it].[object_id] = [ps].[object_id] )
WHERE [it].[internal_type] IN ( 202, 204 )
GROUP BY [it].[parent_id]
) AS [a4] ON ( [a4].[parent_id] = [a1].[object_id] )
INNER JOIN [sys].[all_objects] [a2] ON ( [a1].[object_id] = [a2].[object_id] )
INNER JOIN [sys].[schemas] [a3] ON ( [a2].[schema_id] = [a3].[schema_id] )
WHERE [a2].[type] <> N'S' AND [a2].[type] <> N'IT'
ORDER BY [row_count] DESC