sqlserver查询数据库表数量

本文介绍了SQL Server的sysobjects系统表,用于查询数据库中的对象信息,特别是如何利用sysobjects查找所有用户表以及计数。通过示例查询语句展示了获取表数量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server系统表sysobjects介绍与使用

参考:https://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html

可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器。你可以一个一个地检查表格,但是如果你有1000个表格的话,这可能会消耗相当大的人工。使用sysobjects表格。虽然我不建议你更新这个表格,但是你当然有权对其进行审查。

1、查询列

sysobjects 表 
  在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。

SELECT * from sysobjects where xtype = 'u' 

2、查询表行数
SELECT count(1) from sysobjects where xtype = 'u' 

 

sysobjects 表结构:

列名数据类型描述
namesysname对象名,常用列
idint对象标识号
xtypechar(2)对象类型。常用列。xtype可以是下列对象类型中的一种: 
C = CHECK 约束  D = 默认值或 DEFAULT 约束  F = FOREIGN KEY 约束  L = 日志  FN = 标量函数 
IF = 内嵌表函数   P = 存储过程   PK = PRIMARY KEY 约束(类型是 K)   RF = 复制筛选存储过程 
 S = 系统表   TF = 表函数   TR = 触发器   U = 用户表   UQ = UNIQUE 约束(类型是 K) 
V = 视图   X = 扩展存储过程
uidsmallint所有者用户对象编号
infosmallint保留。仅限内部使用
statusint保留。仅限内部使用
base_schema_ verint保留。仅限内部使用
 replinfo int保留。供复制使用
 parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。
 crdate datetime 对象的创建日期。
 ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0
 schema_ver int 版本号,该版本号在每次表的架构更改时都增加。
 stats_schema_ ver int 保留。仅限内部使用。
typechar(2)  对象类型。可以是下列值之一: 
 C = CHECK 约束   D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 
 FN = 标量函数 IF = 内嵌表函数  K = PRIMARY KEY 或 UNIQUE 约束 
 L = 日志 P = 存储过程 R = 规则  RF = 复制筛选存储过程 
S = 系统表  TF = 表函数 TR = 触发器 U = 用户表 V = 视图 X = 扩展存储过程
 userstatsmallint  保留。
 sysstatsmallint  内部状态信息
 indexdel smallint 保留
 refdate datetime 留用
 versionint  保留
deltrig int  保留
 instrigint  保留
 updtrigint  保留
 seltrigint  保留
 category int 用于发布、约束和标识
 cachesmallint 

 保留

 

 

 

<think>嗯,用户想查询SQL Server中的数据库数量。我需要根据之前的引用内容来给出正确的答案。首先,我应该检查用户提供的引用,找到相关的查询方法。在引用[1]里,有提到使用sys.objects视图,通过type='U'来筛选用户。例如,SELECTcount(*) FROMsys.objectsWHERE type='U'可以统计数量,而SELECT NAMEFROM sys.objects WHEREtype='U'则是列出名称。另一个类似的查询是使用SysObjects,XType='U',不过这可能适用于旧版本,比如SQL Server2000,但sys.objects应该是更通用的。 引用[2]中提到了sys.tables,这个系统视图直接包含用户的信息,可能更直观。比如SELECTCOUNT(*)FROM sys.tablesWHERE is_ms_shipped =0,这样可以排除系统。不过用户可能不需要排除,但最好还是加上这个条件,确保只统计用户创建的。 引用[3]和[4]似乎关于数据库文件大小和关键字,可能不直接相关。但需要确认是否有其他方法。 用户的问题是如何统计数量,所以需要比较不同的方法。sys.objects和sys.tables都是可行的,但sys.tables更直接,因为它专门用于用户,而sys.objects需要过滤type='U'。另外,要注意是否排除系统,用户可能只关心自己创建的,所以加上is_ms_shipped =0的条件更安全。然后,我需要给出两种常用方法,并解释它们的区别。例如,sys.objects是更通用的系统视图,而sys.tables是专门针对用户的。同时,要提醒用户注意权限问题,以及是否需要包含系统。 可能的相关问题包括如何列出名称、如何统计其他对象类型(如视图),或者如何查看的数据量,这些在引用[2]和[3]中有涉及,可以作为相关问题推荐给用户。最后,确保回答结构清晰,分点说明方法,并提供示例代码,同时生成相关问题帮助用户进一步探索。</think>在SQL Server中统计数据库数量,可通过以下两种常用方法实现: ### 方法一:使用sys.objects系统视图 ```sql -- 统计当前数据库中的用户数量 SELECT COUNT(*) FROM sys.objects WHERE type='U' -- 列出所有用户名称 SELECT NAME FROM sys.objects WHERE type='U' ``` 该方法通过过滤`type='U'`筛选用户,兼容SQL Server 2005及以上版本[^1][^2]。 ### 方法二:使用sys.tables系统视图 ```sql -- 统计当前数据库中的用户数量(排除系统) SELECT COUNT(*) FROM sys.tables WHERE is_ms_shipped = 0 -- 列出所有用户名称 SELECT NAME FROM sys.tables WHERE is_ms_shipped = 0 ``` 此方法直接访问专门存储信息的系统视图,`is_ms_shipped=0`确保仅统计用户创建的[^2]。 ### 注意事项 1. 两种方法返回结果可能不同,`sys.tables`默认过滤系统,而`sys.objects`需要显式过滤 2. 需要具有`VIEW DEFINITION`权限 3. 统计结果仅包含当前连接的数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值