当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL Server查询所有表数据量的代码实例

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查询所有表数据量内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com