我正在使用SQL Server 2005,并希望知道如何获取所有表的列表,其中包含每个表中的记录数。
我知道我可以使用sys.tables
视图获取表格列表,但我无法找到计数。
谢谢
答案 0 :(得分:37)
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
答案 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
优点:
注意:默认情况下,“对象详细信息”窗格中可能没有“行计数”,您可以单击列标题并将其带入。