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

MS-SQL如何通过Select命令查询数据库各表的行数与对应列数

MS SQL Server 查询各表列数与行数实现方案

MS SQL Server 的 INFORMATION_SCHEMA.TABLES 系统视图未内置 TABLE_ROWS 字段(该字段为 MySQL 等其他数据库的实现),可通过以下两种方案实现需求:


方案1:系统视图快速统计(性能优先)

通过sys.tables、sys.partitions系统视图读取存储引擎缓存的行数,性能远高于逐表执行COUNT(*),仅存在极低的统计误差,适合大库快速统计场景:

SELECT
    SCHEMA_NAME(t.schema_id) AS TABLE_SCHEMA,
    t.name AS TABLE_NAME,
    -- 统计对应表的列数
    (
        SELECT COUNT(*) 
        FROM INFORMATION_SCHEMA.COLUMNS c 
        WHERE c.TABLE_NAME = t.name 
        AND c.TABLE_SCHEMA = SCHEMA_NAME(t.schema_id)
    ) AS COLUMN_COUNT,
    -- 统计对应表的行数,仅统计堆/聚集索引分区避免重复计数
    SUM(p.rows) AS ROW_COUNT
FROM sys.tables t
INNER JOIN sys.partitions p 
    ON t.object_id = p.object_id 
    AND p.index_id IN (0,1)
GROUP BY t.schema_id, t.name
ORDER BY ROW_COUNT DESC

注意:如果你的库中不存在多schema隔离的情况,可删除schema相关的判断逻辑。


方案2:动态SQL精确统计(精度优先)

如果需要事务级100%准确的实时行数,可通过动态SQL逐表执行COUNT(*)实现:

DECLARE @sql NVARCHAR(MAX) = N''

-- 拼接所有表的查询逻辑
SELECT @sql += N'UNION ALL
SELECT 
    ''' + SCHEMA_NAME(schema_id) + N''' AS TABLE_SCHEMA,
    ''' + name + N''' AS TABLE_NAME,
    (
        SELECT COUNT(*) 
        FROM INFORMATION_SCHEMA.COLUMNS c 
        WHERE c.TABLE_NAME = ''' + name + ''' 
        AND c.TABLE_SCHEMA = ''' + SCHEMA_NAME(schema_id) + '''
    ) AS COLUMN_COUNT,
    COUNT(*) AS ROW_COUNT
FROM ' + QUOTENAME(SCHEMA_NAME(schema_id)) + N'.' + QUOTENAME(name) + N' '
FROM sys.tables

-- 移除开头多余的UNION ALL,拼接排序逻辑
SET @sql = STUFF(@sql, 1, 10, N'') + N' ORDER BY ROW_COUNT DESC'

-- 执行动态SQL
EXEC sp_executesql @sql

注意:库中表数据量较大时执行速度较慢,请勿在生产业务高峰时段执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:01