MS SQL Tables and Data Space Used

Run this SQL query in SSMS to view the tables and disk space used (Data plus Index space used).

USE DB_name GO /* CALCULATES TOTAL DATA SIZE */ SELECT FORMAT(cast(sum(Alloc.used_pages * 8) AS NUMERIC(36,0)),'#,0') AS DataPlusIndex_KB ,FORMAT(cast(sum(Alloc.total_pages * 8) AS NUMERIC(36,0)),'#,0') AS Allocated_KB FROM sys.tables Tab INNER JOIN sys.indexes Indx ON Tab.object_id = Indx.object_id INNER JOIN sys.partitions Ptions ON Indx.object_id = Ptions.object_id and Indx.index_id = Ptions.index_id INNER JOIN sys.allocation_units Alloc ON Ptions.partition_id = Alloc.container_id WHERE schema_name(Tab.schema_id)='SchemaName' GROUP BY schema_name(Tab.schema_id) GO /* CALCULATES DATA SIZE BY TABLE */ SELECT schema_name(Tab.schema_id) + '.' + Tab.name AS TableName /* Alloc.type_desc, */ ,FORMAT(cast(sum(Alloc.used_pages * 8) AS NUMERIC(36,0)),'#,0') AS DataPlusIndex_KB ,FORMAT(cast(sum(Alloc.total_pages * 8) AS NUMERIC(36,0)),'#,0') AS Allocated_KB /* ,FORMAT(cast(sum(Alloc.data_pages * 8) AS NUMERIC(36,0)),'#,0') AS NoLOB_DATA_KB */ FROM sys.tables Tab INNER JOIN sys.indexes Indx ON Tab.object_id = Indx.object_id INNER JOIN sys.partitions Ptions ON Indx.object_id = Ptions.object_id and Indx.index_id = Ptions.index_id INNER JOIN sys.allocation_units Alloc ON Ptions.partition_id = Alloc.container_id WHERE Alloc.used_pages >0 /* and schema_name(Tab.schema_id)='SchemaName' */ GROUP BY schema_name(Tab.schema_id) + '.' + Tab.name /* ,Alloc.type_desc */ ORDER BY sum(Alloc.used_pages) DESC GO

Remove comments around type_desc to view DROPPED, IN_ROW_DATA, LOB_DATA, ROW_OVERFLOW_DATA.

Output example:

 

 

Search words: disc space, HDD, disc drive, disk drive, data space, SQL script, T-SQL, data base space, db, dw