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


    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

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

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

    索引 ID:

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

    root binary(6) 如果  indid  >= 1 和 < 255, root  是指向根页的指针。如果 indid  = 0 或  indid  = 255, root  是指向最后一页的指针。
    minlen smallint 最小行大小。
    keycnt smallint 键的数目。
    groupid smallint 在其上创建对象的文件组 ID。
    dpages int 如果  indid  = 0 或  indid  = 1, dpages  是已用数据页的计数。如果  indid = 255,其设置为 0。否则是已用索引页的计数。
    reserved int 如果  indid  = 0 或  indid  = 1, reserved  是分配给所有索引和表数据的页计数。如果  indid  = 255, reserved  是分配给 text  或  image  数据的页计数。否则是分配给索引的页计数。
    used int 如果  indid  = 0 或  indid  = 1, used  是用于所有索引和表数据的总页数。如果  indid  = 255, used  是用于  text  或 image  数据的页计数。否则是用于索引的页计数。
    rowcnt bigint 基于  indid  = 0 和  indid  = 1 的数据级行计数。如果  indid = 255, rowcnt 设置为 0。
    rowmodctr int 对自上次更新表的统计后插入、删除或更新行的总数进行计数。
    xmaxlen smallint 最大行大小。
    maxirow smallint 最大非叶索引行大小。
    OrigFillFactor tinyint 创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。
    reserved1 tinyint 保留。
    reserved2 int 保留。
    FirstIAM binary(6) 保留。
    impid smallint 保留。索引实现标志。
    lockflags smallint 用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。
    pgmodctr int 保留。
    keys varbinary(816) 组成索引键的列 ID 列表。
    name sysname 表名(如果  indid   = 0 或 255)。否则为索引的名称。
    statblob image 统计 BLOB。
    maxlen int 保留。
    rows int 基于  indid  = 0 和  indid  = 1的数据级行数,该值对于  indid >1 重复。如果 indid  = 255, rows  设置为 0。提供该列是为了向后兼容。
  • 相关阅读:
    QT 开发小记
    linux c 时间函数
    ubuntu 16.04 登录后黑屏
    ubuntu 16.04 修正网卡与ifname对应关系
    HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
    vue里面引入jq的方法
    如何禁用手机自带的输入法软键盘
    vue的首页渲染了两次的原因以及解决方法
    vue使用hightchats
    解决微信小程序使用switchTab跳转后页面不刷新的问题
  • 原文地址:https://www.cnblogs.com/wolfocme110/p/4466577.html
Copyright © 2020-2023  润新知