一次计算所有表的行数

时间:2009-01-09 15:21:32

标签: sql sql-server sql-server-2005

我正在使用SQL Server 2005,并希望知道如何获取所有表的列表,其中包含每个表中的记录数。

我知道我可以使用sys.tables视图获取表格列表,但我无法找到计数。

谢谢

6 个答案:

答案 0 :(得分:37)

从这里开始: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

答案 1 :(得分:22)

对于它的价值,在SQL 2008中不推荐使用sysindexes系统表。上面的代码仍然有效,但这里的查询可以继续使用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

答案 2 :(得分:5)

我可以补充一点,sysindexes.rows是行数的近似值。如果您需要更准确的值,我会运行DBCC UPDATEUSAGE。我们在数据库中遇到了这个问题,其中包含超过47-50万行的表格,我们认为每个表格都丢失了大约50万个。

答案 3 :(得分:3)

也许是这样的:

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

答案 4 :(得分:1)

这是我的方法:

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

就像一个魅力

答案 5 :(得分:1)

这些方法将为您提供选择查询的结果集中的行计数。 SSMS还为您提供了通过以下方式查看对象详细信息的选项:&#34;对象资源管理器详细信息&#34;窗格即可。 这适用于2005及之后的所有版本

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

到达&#34;对象细节窗口&#34;: 单击要在&#34;对象资源管理器&#34;中查看详细信息的对象;窗格和按F7 。 阅读更多:https://technet.microsoft.com/en-us/library/ms191146(v=sql.90).aspx

优点:

  1. 比SQL Server存储此信息时选择查询快得多
  2. 每次都不需要编写/复制粘贴选择查询 - 您只需一个F7
  3. 为您提供更多信息,而不仅仅是行数
  4. 注意:默认情况下,“对象详细信息”窗格中可能没有“行计数”,您可以单击列标题并将其带入。