【发布时间】:2009-01-09 15:21:31
【问题描述】:
我使用的是 SQL Server 2005,想知道如何获取所有表的列表以及每个表中的记录数。
我知道我可以使用sys.tables 视图获取表格列表,但我找不到计数。
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2005
我使用的是 SQL Server 2005,想知道如何获取所有表的列表以及每个表中的记录数。
我知道我可以使用sys.tables 视图获取表格列表,但我找不到计数。
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2005
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
【讨论】:
ORDER BY 2 DESC 的作用是什么?
不管怎样,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
【讨论】:
我可能会补充说 sysindexes.rows 是行数的近似值。如果您需要更准确的值,我会运行 DBCC UPDATEUSAGE。我们在一个包含超过 47 到 5000 万行的表中遇到了这个问题,我们认为每个表都损失了大约 50 万行。
【讨论】:
DBCC UPDATEUSAGE 似乎并不能解决所有潜在问题。我试过update statistics dbo.table_name with rowcount = 100000, pagecount = 100000 DBCC 修复了错误的手动设置页数,但没有修复错误的行数(但我想这是一个非常边缘的情况!)
大概是这样的:
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
【讨论】:
这是我的方法:
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
像魅力一样工作
【讨论】:
所有这些方法都会为您提供选择查询结果集中的行数。 SSMS 还为您提供了通过以下方式查看对象详细信息的选项:“对象资源管理器详细信息”窗格。 这适用于 2005 年及之后的所有版本
对象资源管理器详细信息是 SQL Server Management Studio 的一个组件。它提供了服务器中所有对象的表格视图,并提供了一个用户界面来管理它们。
要到达“对象详细信息窗口”: 在“对象资源管理器”窗格中单击要查看详细信息的对象,然后按 F7。 阅读更多:https://technet.microsoft.com/en-us/library/ms191146(v=sql.90).aspx
优点:
注意:默认情况下,对象详细信息窗格中可能没有行计数,您可以单击列标题并将其引入。
【讨论】: