You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中自动统计指定架构下各表的行数?

SQL Server中按架构自动统计所有表行数的方案

当然有更高效的方案,不用手动导出表列表再用Excel生成语句,只需要指定架构名,就能自动统计该架构下所有表的行数,返回表名和对应行数的结果集。给你两种实用方案:

方案一:高效获取近似行数(推荐,速度极快)

利用SQL Server的系统统计信息来获取行数,不需要扫描全表,适合快速了解数据量级:

DECLARE @SchemaName NVARCHAR(128) = '你的架构名' -- 替换成目标架构名

SELECT 
    t.name AS 表名,
    SUM(p.rows) AS 行数
FROM 
    sys.schemas s
JOIN 
    sys.tables t ON s.schema_id = t.schema_id
JOIN 
    sys.indexes i ON t.object_id = i.object_id
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
WHERE 
    s.name = @SchemaName
    AND i.index_id IN (0, 1) -- 0=堆表,1=聚集索引,只统计主数据分区
GROUP BY 
    t.name
ORDER BY 
    行数 DESC

说明:

  • 这个方法依赖系统分区统计数据,行数是近似值,和实际可能有少量偏差
  • 如果需要更接近实际值,可以先执行UPDATE STATISTICS 表名更新统计信息,再运行上面的脚本

方案二:精确统计行数(适合需要准确数字的场景)

通过动态SQL自动生成每个表的COUNT(*)语句并执行,结果完全准确,但大表较多时执行速度会很慢:

DECLARE @SchemaName NVARCHAR(128) = '你的架构名' -- 替换成目标架构名
DECLARE @DynamicSQL NVARCHAR(MAX) = ''

SELECT 
    @DynamicSQL += 'SELECT ''' + t.name + ''' AS 表名, COUNT(*) AS 行数 FROM ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' UNION ALL '
FROM 
    sys.schemas s
JOIN 
    sys.tables t ON s.schema_id = t.schema_id
WHERE 
    s.name = @SchemaName

-- 去掉最后多余的UNION ALL
SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 10)

EXEC sp_executesql @DynamicSQL

说明:

  • QUOTENAME函数用来处理表名或架构名包含特殊字符的情况,避免语法错误
  • 大表执行COUNT(*)会扫描全表,耗时较长,建议在业务低峰期运行

内容的提问来源于stack exchange,提问作者Ashutosh Mahato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:07:19