从 SQL Server 目录视图中检索表元数据

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

我使用过的所有数据库系统都有某种系统表,这些表提供有关数据库中表、列、索引、约束等的信息。 SQL 服务器也不例外;事实上 查询它的系统目录 有不同的方法。我们将看看其中之一:目录视图,它可以很容易地查询。

能够检索此元数据在各种情况下都非常有用,例如开发工具来处理和可视化数据(如 sql server management studio),或自动执行死记硬背的任务(如为每个表创建实体类)。

表名列表

查询目录视图就像查询任何表一样简单。您可以做的最简单的事情就是获取表名列表。使用此查询:


 select *
from sys.tables;

这是结果:

所以如果你想要的只是表的名称,只需优化查询以仅选择:


 select *
from sys.tables;

使用 ado .net 检索数据

使用古老的 ado .net 技术很容易运行简单的查询。下面是一个示例,您可以使用它从 ac# 应用程序中检索表名。


 select *
from sys.tables;

可以类似地修改此代码以从我们接下来将看到的查询中获取其他数据。

更高级的查询

检索其他表元数据(如索引、外键等)并不像检索表名那样简单。但是,您可以从 查询 sql server 系统目录常见问题解答中 获得对您需要的任何元数据的查询。

这是 获取列数据类型的查询


 select *
from sys.tables;

这是结果:

这是 获取表索引的方式 (可能包括主键):


 select *
from sys.tables;

这是一个示例结果:

最后,这是 获取外键信息的方法


 select *
from sys.tables;

这是结果:

因此,尽管这些查询并非易事,但您可以从 查询 sql server 系统目录 faq 中 找到您需要的任何内容,然后从那里进行调整。

一个查询来统治他们

如果您打算执行代码生成之类的操作,您可能希望构建一个查询来一次性检索上述所有元数据。您可以通过组合上述查询来做到这一点。幸运的是,我已经为你做到了。干得好:


 select *
from sys.tables;

这是你会得到的:

其中包括列名、列类型(以及小数精度等内容)、索引、主键、自动增量(即 is_identity )和外键信息(约束名称、引用表和引用列)。

我只在一个非常简单的场景中对此进行了测试,所以我很确定还有待改进。虽然这可以被视为一个起点,但我们非常欢迎您提供反馈。