This script can be used to get the size of all tables in a SQL Server database. This script is tested in SQL Server 2012, SQL Server 2014, SQL Server 2016 and SQL Server 2017.

 

-> Below script can be used to get the size of all tables in a SQL Server database. It provides details such as Table name, Number of records, Reserved space in KB, Data space in KB, Index space in KB, Unsed space in KB and Table size in GB.

SQL
Edit|Remove
SELECT 
  
a3.name +'.'+a2.name AS [TableName], 
a1.rows as [# Records], 
(a1.reserved + ISNULL(a4.reserved,0))* 8 AS [Reserved KB], 
a1.data * 8 AS [Data KB], 
(CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8 AS [Indexes KB], 
(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 KB], 
convert(decimal(18,2),(((a1.reserved + ISNULL(a4.reserved,0))* 8) - ((CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8))/1024.0/1024.0as [Table_used_Space GBFROM 
(SELECT 
ps.object_idSUM ( 
CASE 
WHEN (ps.index_id < 2THEN row_count 
ELSE 0 
END 
) AS [rows], 
SUM (ps.reserved_page_countAS reservedSUM ( 
CASE 
WHEN (ps.index_id < 2THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_countELSE (ps.lob_used_page_count + ps.row_overflow_used_page_countEND 
) AS dataSUM (ps.used_page_countAS used 
FROM sys.dm_db_partition_stats ps 
GROUP BY ps.object_idAS a1 
LEFT OUTER JOIN 
(SELECT 
it.parent_idSUM(ps.reserved_page_countAS reservedSUM(ps.used_page_countAS used 
FROM sys.dm_db_partition_stats ps 
INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_idWHERE it.internal_type IN (202,204GROUP BY it.parent_idAS a4 ON (a4.parent_id = a1.object_idINNER JOIN sys.all_objects a2  ON ( a1.object_id = a2.object_id ) 
INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_idWHERE a2.type != N'S' and a2.type != N'IT' 
--ORDER BY a3.namea2.name 
--order by a1.rows desc 
order by [Table_used_Space GBdesc