一次计算所有表的行数

All*_*nde 16 sql sql-server sql-server-2005

我正在使用SQL Server 2005,并想知道如何获得所有表的列表,其中包含每个表中的记录数.

我知道我可以使用sys.tables视图获取表格列表,但我无法找到计数.

谢谢

bri*_*ian 39

从这里:http://web.archive.org/web/20080701045806/http : //sqlserver2000.databases.aspfaq.com : 80/how-do-i-get-a-list-of-sql-server-tables -and-其行,counts.html

SELECT 
    [TableName] = so.name, 
    [RowCount] = MAX(si.rows) 
FROM 
    sysobjects so, 
    sysindexes si 
WHERE 
    so.xtype = 'U' 
    AND 
    si.id = OBJECT_ID(so.name) 
GROUP BY 
    so.name 
ORDER BY 
    2 DESC
Run Code Online (Sandbox Code Playgroud)


小智 22

对于它的价值,在SQL 2008中不推荐使用sysindexes系统表.上面的代码仍然有效,但这里的查询在SQL 2008系统视图中继续运行.

select
schema_name(obj.schema_id) + '.' + obj.name,
row_count
from (
    select
        object_id,
        row_count = sum(row_count)
    from sys.dm_db_partition_stats
    where index_id < 2  -- heap or clustered index
    group by object_id
) Q
join sys.tables obj on obj.object_id = Q.object_id
Run Code Online (Sandbox Code Playgroud)


Kev*_*Kev 5

我可以补充一点,sysindexes.rows是行数的近似值.DBCC UPDATEUSAGE如果你需要一个更准确的价值,我会跑一个.我们在数据库中遇到了这个问题,其中包含超过47-50万行的表格,我们认为我们每个都丢失了大约50万个.