欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

SQL Server查询所有表数据量的代码实例

2025年08月21日 MsSqlserver
1.查询当前数据库中所有用户表的数据量(即每个表的记录数)select a.name , b.rows from sysobjects as a inner join sysi

1.查询当前数据库中所有用户表的数据量(即每个表的记录数)

select  a.name ,  b.rows  from    sysobjects as a

       inner join sysindexes as b on a.id = b.id
where   ( a.type = 'u' )  and ( b.indid in ( 0, 1 ) )
order by b.rows desc

select 
    t.name as tablename,
    s.name as schemaname,
    p.rows as rowcounts
from 
    sys.tables t
inner join      
    sys.schemas s on t.schema_id = s.schema_id
inner join      
    sys.partitions p on t.object_id = p.object_id
where 
    p.index_id in (0, 1)  -- 0 = heap table, 1 = clustered index
group by 
    t.name, s.name, p.rows
order by 
    p.rows desc;

说明:
sys.tables:获取数据库中所有用户表。

sys.partitions:每个表(或分区)在物理存储层面的分区信息,包含记录数(rows)。

index_id in (0, 1):过滤掉非主数据行的分区(如非聚集索引的副本)。

2.在1的基础上增加显示数据库名

select 
    db_name() as databasename,
    t.name as tablename,
    s.name as schemaname,
    sum(p.rows) as rowcounts
from 
    sys.tables t
inner join      
    sys.schemas s on t.schema_id = s.schema_id
inner join      
    sys.partitions p on t.object_id = p.object_id
where 
    p.index_id in (0, 1)
group by 
    t.name, s.name
order by 
    rowcounts desc;

3.跨所有数据库查询每个数据库中每张表的数据量(行数)

需要跨多个数据库查,可以使用 sp_msforeachdb 或手动遍历数据库执行2中语句。

跨所有数据库查询每个数据库中每张表的数据量(行数),使用 sp_msforeachdb 系统存储过程完成:

exec sp_msforeachdb n'
use [?];

if db_id() not in (1, 2, 3, 4)  -- 排除系统数据库(master, tempdb, model, msdb)
begin
    print ''database: [?]'';
    select 
        db_name() as databasename,
        s.name as schemaname,
        t.name as tablename,
        sum(p.rows) as rowcounts
    from 
        sys.tables t
    inner join 
        sys.schemas s on t.schema_id = s.schema_id
    inner join 
        sys.partitions p on t.object_id = p.object_id
    where 
        p.index_id in (0, 1)
    group by 
        s.name, t.name
    order by 
        rowcounts desc;
end
';

说明:
sp_msforeachdb:遍历所有数据库。

use [?]:在遍历时切换数据库上下文。

if db_id() not in (…):排除系统数据库。

每个数据库都会输出一个标题,然后列出其所有表及记录数。

注意事项:
该语句需以 sa 或具有跨库权限的账户执行。

sp_msforeachdb 是未文档化的存储过程,虽然广泛使用但微软不推荐用于关键任务。如果需要更稳健的版本可考虑自己实现游标版本。

总结 

到此这篇关于sql server查询所有表数据量的文章就介绍到这了,更多相关sqlserver查询所有表数据量内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!