代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

同时计算所有表的行数

  •  15
  • Allain Lalonde  · 技术社区  · 15 年前

    我使用的是SQLServer2005,我想知道如何获得所有表的列表,每个表中都有记录数。

    我知道我可以用 sys.tables 查看,但我找不到计数。

    谢谢你

    6 回复  |  直到 9 年前
        1
  •  36
  •   Community Egal    5 年前

    从这里: http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html

    SELECT 
        [TableName] = so.name, 
        [RowCount] = MAX(si.rows) 
    FROM 
        sysobjects so, 
        sysindexes si 
    WHERE 
        so.xtype = 'U' 
        AND 
        si.id = OBJECT_ID(so.name) 
    GROUP BY 
        so.name 
    ORDER BY 
        2 DESC
    
        2
  •  22
  •   Tom Wilson    13 年前

    就其价值而言,SysIndexes系统表在SQL 2008中已被弃用。上面的内容仍然有效,但下面的查询将与SQL 2008系统视图一起使用。

    select
    schema_name(obj.schema_id) + '.' + obj.name,
    row_count
    from (
        select
            object_id,
            row_count = sum(row_count)
        from sys.dm_db_partition_stats
        where index_id < 2  -- heap or clustered index
        group by object_id
    ) Q
    join sys.tables obj on obj.object_id = Q.object_id
    
        3
  •  5
  •   Kev    15 年前

    我可以补充一下,sysindexes.rows是行数的近似值。我会跑 DBCC UPDATEUSAGE 如果需要更精确的值。我们在一个数据库上遇到了这个问题,其中的表包含超过4700-5000万行,我们认为我们已经从每一行中损失了大约50万行。

        4
  •  3
  •   Community Egal    5 年前

    也许是这样:

    SELECT 
        [TableName] = so.name, 
        [RowCount] = MAX(si.rows) 
    FROM 
        sysobjects so, 
        sysindexes si 
    WHERE 
        so.xtype = 'U' 
        AND 
        si.id = OBJECT_ID(so.name) 
    GROUP BY 
        so.name 
    ORDER BY 
        2 DESC
    

    http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html

        5
  •  1
  •   joaopintocruz    12 年前

    这是我的方法:

    create table #rowcount (tablename varchar(128), rowcnt int)
    exec sp_MSforeachtable 
       'insert into #rowcount select ''?'', count(*) from ?'
    select * from #rowcount
        order by tablename
    drop table #rowcount
    

    很有魅力

        6
  •  1
  •   Deep Kalra    9 年前

    所有这些方法都将为您提供select查询结果集中的行数。SSMS还允许您通过以下方式查看对象详细信息: “对象资源管理器详细信息”窗格 . 此版本适用于2005年及之后的所有版本

    对象资源管理器详细信息是SQL Server Management Studio的组件。它提供了服务器中所有对象的表格视图,并提供了用于管理这些对象的用户界面。

    要到达“对象详细信息窗口”: 单击要在“对象资源管理器”窗格中查看详细信息的对象,然后 按F7键 . 阅读更多: https://technet.microsoft.com/en-us/library/ms191146(v=sql.90).aspx

    赞成的意见:

    1. 比选择查询快得多,因为SQL Server存储了这些信息
    2. 不需要每次都写/复制粘贴选择查询-您只需离开一个F7
    3. 提供更多信息,而不仅仅是行数

    注意:默认情况下,对象详细信息窗格中可能没有行计数,您可以单击列标题并将其引入。