查询SQL Server数据库中的用户表的数量的问题

本文讨论了在SQLServer2005中统计数据库表数量时遇到的问题,通过分析发现由于误操作导致查询结果包含非用户表。文章详细解释了问题原因,并提供了避免此类情况的SQL查询语句修改建议。

今天在开发时,遇到要统计SQL Server 2005中数据库表的个数的问题。于是自己写下SQL:select count(1) from sysobjects where XTYPE='u',一执行,发现查询的得到表的个数比实际的用户表的个数多了一个。仔细一看发现结果中多了条数据。

图示如下:

其中sysdiagrams并不是用户表,而是数据库的关系图。可是我也没有建数据库的关系图,原来自己在操作SSMS时不小心点击了当前数据库下

的数据库关系图,图示如下:

然后选择了是,结果就出现上面查询得出的结果。

就此问题的答案揭晓了。

于是我将SQL查询语句改了下,可以避免这种情况了。

只统计出用户表的个数:

select count(1) from sysobjects where XTYPE='u' and [name] not in ('sysdiagrams')


<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. 统计结果仅包含当前连接的数据库
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值