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

 更新时间:2025年08月21日 08:41:38   作者:夜光小兔纸  
在SQL Server中查看数据库中有多少张表,可以通过查询系统视图或系统表来实现,这篇文章主要介绍了SQL Server查询所有表数据量的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

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

相关文章

  • mybatis的动态sql详解(精)

    mybatis的动态sql详解(精)

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下
    2015-08-08
  • SQL server使用自定义函数以及游标

    SQL server使用自定义函数以及游标

    最近忙于动态监测软件的开发,处理有关标准宗地编码和区段编码关系,关系如下表所示
    2011-10-10
  • ASP和SQL Server如何构建网页防火墙

    ASP和SQL Server如何构建网页防火墙

    本文介绍的是利用ASP和SQL Server构建网页防火墙,介绍建立的过程,主要分三步给大家介绍的。希望对你有帮助,一起来看。
    2015-10-10
  • SQL Server中的逻辑函数介绍

    SQL Server中的逻辑函数介绍

    这篇文章介绍了SQL Server中的逻辑函数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • sql where 1=1的优缺点分析

    sql where 1=1的优缺点分析

    where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句
    2013-04-04
  • SQL SERVER 将XML变量转为JSON文本

    SQL SERVER 将XML变量转为JSON文本

    这篇文章主要介绍了SQL SERVER 将XML变量转为JSON文本的相关资料,需要的朋友可以参考下
    2016-03-03
  • SQL Server误设置max server memory的处理方法

    SQL Server误设置max server memory的处理方法

    这篇文章主要给大家介绍了关于SQL Server误设置max server memory的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧下
    2019-12-12
  • 修改数据库为多用户模式

    修改数据库为多用户模式

    这篇文章主要介绍了修改sql数据库为多用户模式的方法,需要的朋友可以参考下
    2014-07-07
  • sqlserver 触发器实例代码

    sqlserver 触发器实例代码

    何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程
    2011-12-12
  • 关于SQL Server数据库中的用户权限和角色管理功能实现

    关于SQL Server数据库中的用户权限和角色管理功能实现

    在本文中,我们介绍了在SQL Server中创建用户、分配权限和管理角色的基础知识,请记住定期审查和更新用户权限,以符合您组织的安全政策和数据访问要求,这篇文章主要介绍了关于SQL Server数据库中的用户权限和角色管理,需要的朋友可以参考下
    2024-03-03

最新评论