Search code examples
sql-serverdatabase

Query to list number of records in each table in a database


How to list row count of each table in the database. Some equivalent of

select count(*) from table1
select count(*) from table2
...
select count(*) from tableN

Solution

  • If you're using SQL Server 2005 and up, you can also use this:

    SELECT 
        t.NAME AS TableName,
        i.name as indexName,
        p.[Rows],
        sum(a.total_pages) as TotalPages, 
        sum(a.used_pages) as UsedPages, 
        sum(a.data_pages) as DataPages,
        (sum(a.total_pages) * 8) / 1024 as TotalSpaceMB, 
        (sum(a.used_pages) * 8) / 1024 as UsedSpaceMB, 
        (sum(a.data_pages) * 8) / 1024 as DataSpaceMB
    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.NAME NOT LIKE 'dt%' AND
        i.OBJECT_ID > 255 AND   
        i.index_id <= 1
    GROUP BY 
        t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
    ORDER BY 
        object_name(i.object_id) 
    

    In my opinion, it's easier to handle than the sp_msforeachtable output.