您的位置:首页 > 数据库

查询数据库中所有表的数据数量的方法

2016-03-09 11:33 295 查看
要查询一个表的数据数量,相信大家很快就想到了select count(1) from table1,但如果我们要查询数据库中所有表的的数据数量要怎么查呢?方法比较多,下面介绍两种本人常用的方法:

一,利用sp_spaceused存储过程,sp_spaceused一次只能查询一个表的数据情况,所以使用sp_spaceused还得结合游标,不是很好的解决方法,大家可以参考第二种方法:

利用sp_spaceused的方法如下:

set nocount on

create table #t1

(

name varchar(200),

rows int,

reserved varchar(50),

data varchar(50),

index_size varchar(50),

unused varchar(50)

)

declare @tablename varchar(200)

declare @sql varchar(2000)

declare m_cursor cursor local for select object_name(object_id) from sys.objects where type='U'

open m_cursor

fetch next from m_cursor into @tablename

while @@fetch_status=0

begin

set @sql='insert into #t1 exec sp_spaceused '+@tablename

exec(@sql)

fetch next from m_cursor into @tablename

end

close m_cursor

deallocate m_cursor

select name,rows from #t1

drop table #t1

简单介绍一下存储过程sp_spaceused作用:显示行数、保留的磁盘空间以及当前数据库中的表、索引视图或 SQL Server 2005 Service Broker 队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。

如果我们这样执行:sp_spaceused 表名

它会返回六列结果,截图如下:



name:表名

rows:该表的数据行数

reserved:由数据库中对象分配的空间总量

data:数据使用的空间总量

index_size:索引使用的空间总量

unused:保留但尚未使用的空间总量

其中rows就是我们要的结果列。

二,利用sys.dm_db_partition_stats,Sql命令如下:

select b.name,a.row_count from sys.dm_db_partition_stats a,

sys.objects b

where a.object_id=b.object_id

and a.index_id<=1

and b.type='U'

sys.dm_db_partition_stats它返回当前数据库中每个分区的页和行计数信息,在上面的sql中,三个关键列的意思如下:

object_id:表或者索引视图的ID,所以可以用它与sys.objects表的object_id相匹配。

row_count:该表或索引视图中数据的数量,就是我们要查询的结果。

index_id:该表或索引视图的索引ID。 如果该表没有索引,那么会在sys.dm_db_partition_stats中存在一行index_id=0的记录,如果有一个聚集索引(而且一个表中也只能有一个聚集索引),那么在sys.dm_db_partition_stats中存在一行index_id=1的记录,而对应的index_id=0的记录没有了。如果这个表在sys.dm_db_partition_stats中存在多行index_id >1的记录,则说明这个表存在多个非聚集索引,我们这里判断index_id<=1,是假定每个表都有主键,且主键为聚集索引。配合sys.objects表的type='U',就可以查出每个用户表的数据数量了。

sys.dm_db_partition_stats其它行的信息,大家可以查询msdn帮助文档。

http://write.blog.csdn.net/postedit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: