您的位置:首页 > 数据库

MS SQL查询所有表行数,获取所有数据库名,表名,字段名

2015-04-29 17:30 531 查看
1.获取所有数据库名

--SELECT Name FROM Master..SysDatabases ORDER BY Name --

2.获取所有表名:
--SELECT Name NAMEtemp,* FROM TEST..SysObjects Where XType='U' ORDER BY Name --表名
----XType='U':表示所有用户表;
----XType='S':表示所有系统表;

3.获取所有字段名:

SELECT Name FROM SysColumns WHERE id=Object_Id('TableName')

4.查询所有表行数
----SELECT * FROM TEST..sysindexes --表明细

select a.name, b.rows --查询所有表行数/TEST为库名称
from TEST..sysobjects a
inner join TEST..sysindexes b on a.id = b.id
where a.type = 'u'
and b.indid in (0, 1)
order by a.name

【 declare @N int set @N=10000

--通过查询索引表的聚集索引查询 (indid=1,这种是体现数据是以聚集索引方式存储体现的查询)
select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid=1 and objectproperty(id,'isusertable')=1
--通过查询索引表的无聚集索引查询 (indid=0,这种是体现数据是以数据堆方式存储体现的查询,无聚集索引的表)
select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid=0 and objectproperty(id,'isusertable')=1

有人问indid是什么意思?
select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid<=1 and objectproperty(id,'isusertable')=1 即可),非聚集索引则不一定
必须。
indid=1 查询的就是根据聚集索引键值来查询sysindexs,也就是说不存在聚集索引的表,通过上面的查询是查不出来的。
而indid>1(如indid=2、indid=3等) 则代表查询的是根据非聚集索引序号,但没有聚集索引的表还是大量存在的(这不比
当然此查询可能有误差,在索引碎片的产生和清理过程确实会存在,只要索引定期维护、重建,那么误差应该不大,甚至不存在误差了

--objectproperty:

http://technet.microsoft.com/zh-cn/library/ms176105.aspx

sysindexes详细内容

http://technet.microsoft.com/zh-cn/library/ms190283.aspx

数据库中的每个索引和表在表中各占一行。该表存储在每个数据库中。

列名数据类型描述
idint表 ID(如果 indid = 0 或 255)。否则为索引所属表的 ID。
statusint内部系统状态信息。
firstbinary(6)指向第一页或根页的指针。
indidsmallint索引 ID:

1 = 聚集索引
>1 = 非聚集
255 = 具有 textimage 数据的表条目

rootbinary(6)如果 indid >= 1 和 < 255, root 是指向根页的指针。如果 indid = 0 或 indid = 255, root 是指向最后一页的指针。
minlensmallint最小行大小。
keycntsmallint键的数目。
groupidsmallint在其上创建对象的文件组 ID。
dpagesint如果 indid = 0 或 indid = 1, dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。
reservedint如果 indid = 0 或 indid = 1, reserved 是分配给所有索引和表数据的页计数。如果 indid = 255, reserved 是分配给 textimage 数据的页计数。否则是分配给索引的页计数。
usedint如果 indid = 0 或 indid = 1, used 是用于所有索引和表数据的总页数。如果 indid = 255, used 是用于 textimage 数据的页计数。否则是用于索引的页计数。
rowcntbigint基于 indid = 0 和 indid = 1 的数据级行计数。如果 indid = 255, rowcnt 设置为 0。
rowmodctrint对自上次更新表的统计后插入、删除或更新行的总数进行计数。
xmaxlensmallint最大行大小。
maxirowsmallint最大非叶索引行大小。
OrigFillFactortinyint创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。
reserved1tinyint保留。
reserved2int保留。
FirstIAMbinary(6)保留。
impidsmallint保留。索引实现标志。
lockflagssmallint用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。
pgmodctrint保留。
keysvarbinary(816)组成索引键的列 ID 列表。
namesysname表名(如果 indid = 0 或 255)。否则为索引的名称。
statblobimage统计 BLOB。
maxlenint保留。
rowsint基于 indid = 0 和 indid = 1的数据级行数,该值对于 indid >1 重复。如果 indid = 255, rows 设置为 0。提供该列是为了向后兼容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐