====== Count rows in every table ====== Sometimes it's useful to get a row count for every table in a database; for example to get a feel for what's changed in a later version (or to demonstrate that two versions are different), or to get an idea about what's significant when you're inspecting a source system prior to incorporating data into a data warehouse. See also [[count nulls]]. DECLARE @sql VARCHAR(MAX) = '' SELECT @sql += ' UNION ALL SELECT ''' + s.name + '.' + o.name + ''', COUNT(*) FROM [' + s.name + '].[' + o.name + '] WITH (NOLOCK)' FROM sys.objects o INNER JOIN sys.schemas s ON s.schema_id = o.schema_id WHERE o.[type] = 'U' -- tables only SET @sql = 'WITH cte ( TableName , Rows ) AS ( ' + SUBSTRING(@sql, 15, LEN(@sql)) + ' ) SELECT * FROM cte ORDER BY TableName' PRINT @sql EXEC(@sql) ===== Quick and (possibly) approximate ===== The ''[rows]'' field in ''sys.partitions'' provides an [[https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-partitions-transact-sql|approximate number of rows in each partition]]. SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) + '.' + QUOTENAME(OBJECT_NAME([object_id])) , SUM([rows]) FROM sys.partitions WHERE index_id < 2 -- 0 = heap, 1 = clustered AND OBJECT_SCHEMA_NAME([object_id]) NOT IN ('sys') --AND [rows] > 0 GROUP BY [object_id] {{tag> tsql dynamic testing warehouse}}