MS SQL: List All Tables in All Databases and File Sizes

Modified on Mon, 22 Sep at 4:40 PM

-- Create a temporary table to store results
CREATE TABLE #TableSizes (
    DatabaseName NVARCHAR(128),
    TableName NVARCHAR(128),
    RowCounts INT,
    TotalSpaceMB DECIMAL(18,2),
    UsedSpaceMB DECIMAL(18,2),
    UnusedSpaceMB DECIMAL(18,2)
);

-- Cursor to loop through all databases
DECLARE @DatabaseName NVARCHAR(128);
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE state_desc = 'ONLINE' AND name NOT IN ('master', 'tempdb', 'model', 'msdb');

OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName;

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = '
    USE [' + @DatabaseName + '];
    INSERT INTO #TableSizes
    SELECT
        ''' + @DatabaseName + ''' AS DatabaseName,
        t.NAME AS TableName,
        p.rows AS RowCounts,
        CAST(SUM(a.total_pages) * 8 / 1024.0 AS DECIMAL(18,2)) AS TotalSpaceMB,
        CAST(SUM(a.used_pages) * 8 / 1024.0 AS DECIMAL(18,2)) AS UsedSpaceMB,
        CAST((SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024.0 AS DECIMAL(18,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
    WHERE
        t.is_ms_shipped = 0
    GROUP BY
        t.NAME, p.rows;
    ';
    EXEC sp_executesql @SQL;
    FETCH NEXT FROM db_cursor INTO @DatabaseName;
END
CLOSE db_cursor;
DEALLOCATE db_cursor;

-- Final result
SELECT * FROM #TableSizes ORDER BY DatabaseName, TotalSpaceMB DESC;

-- Clean up
DROP TABLE #TableSizes;

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article