除了用户自定义的表之外,我们在处理基础用户定义表的同时,还有多种独特的表可以操作。系统表 是 SQL Server 引擎使用的一类特殊的表,用于存储有关 SQL Server 实例配置和对象的数据,这些数据可以通过系统视图进行访问。
存储特定数据库元数据的底层表被称为系统表。在这个方面,Master 数据库是独特的,因为它包含了一些其他数据库所没有的额外表。这些表中包含了服务器范围的持久化元数据。
系统目录视图允许我们浏览系统表中的数据。系统表不能手动更新。用户不应该直接修改系统表。例如,避免使用用户定义触发器、DELETE、UPDATE 或 INSERT 语句来更改系统表。
Microsoft 建议不要直接查询系统表。系统目录表的结构由 SQL Server 的基础架构决定,并且因版本而异。如果程序直接查询在新版本 SQL Server 中更改或缺失的系统表,则在迁移到新版本时可能需要至少部分重写程序。”
Microsoft 保持了这些组件从一个版本到下一个版本的兼容性。SQL Server 的核心架构决定了系统表的格式,这可能因版本而异。因此,在使用后续版本的 SQL Server 之前,可能需要修改直接访问系统表未记录列的程序。
SQL Server 跟踪的表包含有关所有对象、数据类型、约束、配置设置及其可用资源的详细信息。这组表也称为系统表。每个数据库(包括 Master 数据库)中都存在一个子集的表,提供有关对象的信息,而另一个子集的表仅驻留在 Master 中。
SQL Server 的系统表存储有关数据的关键元数据或信息。表名、列名和数据类型详细信息包含在此数据中,以便 SQL Server 能够正确执行查询并生成结果集。系统表包含有关合法用户及其权限的数据,以确保数据安全,以及有关 SQL Server 配置的数据,允许您预测和管理系统行为。通过理解这些表中的数据并了解 SQL Server 执行背后的原因,您可以开发更好的解决方案。通常,我们可以通过名称识别系统表。sys 这三个字母是每个系统表的开头,虽然并非每个以 sys 开头的词都是系统表。也可以通过对象 ID 识别系统表,它们的对象 ID 都小于 100。
SQL 中不同类型的系统表:
- sys.objects – 仅存在于 master 数据库中,显示每个对象、类型和创建日期。
- sys.indexes – 仅存在于 master 数据库中,显示每个索引及其类型。
- sys.sysschobjs – 存在于每个数据库中,每一行显示数据库中的一个对象。
- sys.sysbinobjs – 存在于每个数据库中,为数据库中的每个 Service Broker 实体显示一行。
- sys.sysnsobjs – 存在于每个数据库中,为每个命名空间范围的实体显示一行。该表用于存储 XML 集合实体。
- sys.sysdbreg – 仅存在于 master 数据库中,为每个注册的数据库显示一行。
- sys.sysxsrvs – 仅存在于 master 数据库中,为每个本地、链接或远程服务器显示一行。
- sys.sysrmtlgns – 仅存在于 master 数据库中,为每个远程登录映射显示一行,用于将声称来自相应服务器的登录映射到实际的本地登录。
- sys.syslnklgns – 仅存在于 master 数据库中,为每个链接登录映射显示一行。从本地服务器传输到相应链接服务器的远程过程调用和分布式查询使用链接登录映射。
- sys.sysxlgns – 仅存在于 master 数据库中,为每个服务器主体显示一行。
- sys.sysdbfiles – 存在于每个数据库中。如果列 dbid 为 0,则该行表示属于数据库的文件。
- sys.sysusermsg – 仅存在于 master 数据库中,每一行显示一条用户定义的错误消息。
- sys.sysobjkeycrypts – 存在于每个数据库中,为每个与对象关联的对称密钥、加密或加密属性显示一行。
- sys.syslogshippers – 仅存在于 master 数据库中,为每个数据库镜像见证显示一行。
- sys.s