How to get size of all tables of a SQL DB in a spreadsheet

Fahad Ahmed
Dynamics Online
Published in
2 min readOct 30, 2023

Many times while upgrading or migrating from on-prem to cloud hosted ERP, our customers would like to know if their current AX DB size would be applicable on cloud. Do they need to buy extra DB storage or should that be enough given the number of licenses they are buying. And for any SQL Server DB, you might want to know the size of each table for various reasons. No matter what the scenario is, here is the script to know that and then copy the results to a spreadsheet for further analysis.

1. Run the following script on AxDB in SQL Server management studio.

SELECT 
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
TotalSpaceMB DESC, t.Name

2. Click on the results tab here. That would select all the rows.

3. Click on Edit -> Copy with headers.

4. Paste the results in an excel file and save the file.

--

--

Fahad Ahmed
Dynamics Online

Enterprise Software Architect - Technology Leader - Father