什么是SQL Server数据字典?

目录

什么是数据字典?

SQL Server如何使用数据字典

数据字典的其他用途

INFORMATION_SCHEMA视图

使用INFORMATION_SCHEMA视图的示例

列出包含指定列的所有表

列出数据库中的所有表

列出每个模式中的表数

SQL Server目录(Catalog)视图

使用目录(Catalog)视图的示例

列出数据库中的所有表

列出每个模式中的表数


什么是数据字典?

SQL Server中,数据字典是一组数据库表,用于存储有关数据库定义的信息。该字典包含有关数据库对象的信息,例如表,索引,列,数据类型和视图。

SQL Server使用数据字典来执行查询,并在数据库中添加,删除或更改对象时自动更新。

本文的所有示例都基于Microsoft SQL Server Management StudioAdventureWorks2012数据库。

SQL Server如何使用数据字典

SQL Server使用数据库字典来验证SQL语句。执行SQL语句时,DBMS数据库管理系统)会解析该语句,然后确定您引用的表和字段是否有效。要快速执行此操作,它将引用数据字典。

除了测试语句的有效性之外,SQL Server还使用数据字典来协助生成查询计划,并引用定义数据库结构的信息。

数据字典本身就成为SQL Server用于访问数据的指南。简单地说,没有数据字典,虽然SQL Server会知道并理解SQL语言,但它不会知道您的数据库表和列;因此,它无法查询它们。

数据字典的其他用途

由于数据字典包含数据库的定义,因此您可以使用它来获取有关数据库的信息。真正酷的是数据字典由SQL表和视图组成。这意味着,您可以通过查询获取有关数据库的信息!

设计人员和开发人员使用数据字典来理解数据库的结构。您可以将字典视为最新的参考文档。

SQL Server Management Studio等设计工具使用数据字典通过对象资源管理器显示有关数据库的信息。

 

什么是SQL Server数据字典?_第1张图片

SQL Server Management Studio对象资源管理器

上面列出的表格并不神奇,而是对象资源管理器向数据字典发出查询以检索所有用户表。

数据字典存储在一系列系统表中。虽然您可以直接查询这些表,但Microsoft保留修改组成数据字典的系统表的权利。因此,他们建议您查询INFORMATION_SCHEMA视图而不是直接访问表。

由于您可以自己查询数据字典,因此您可以回答一些问题,否则这些问题需要通过对象资源管理器进行大量搜索和确定。例如,如何使用BusinessEntityID列轻松找到所有表和视图?如果没有数据字典,您将不得不使用对象资源管理器并打开每个表和视图,并查看列的定义。但是,使用数据字典可以使用简单查询来完成。

INFORMATION_SCHEMA视图

SQL Server中包含的INFORMATION_SCHEMA视图符合SQL-92 ISO标准。这意味着符合ISO标准的其他数据库供应商将提供相同的视图集。

以下是一些更常用的视图及其描述:

  • COLUMNS——为当前用户有权在当前数据库中使用的每列返回一行。此视图可用于确定列定义使用的数据类型和表。
  • TABLES——为用户有权在当前数据库中使用的每个表返回一行。注意,使用TABLES视图返回表和视图。
  • VIEW_TABLE_USAGE——为当前数据库中的视图中使用的每个表返回一行。
  • VIEWS——为可以使用当前数据库中当前用户的权限访问的视图返回一行。

使用INFORMATION_SCHEMA视图的示例

列出包含指定列的所有表

您可以使用INFORMATION_SCHEMA.COLUMNS视图执行此操作。例如,以下列出了所有包含列BusinessEntityID的表和视图

SELECT TABLE_NAME
FROM   AdventureWorks2012_Data.INFORMATION_SCHEMA.COLUMNS
WHERE  COLUMN_NAME = 'BusinessEntityID'

你可以想象数据字典可以派上用场!你能想象必须手工搜索每个定义才能找到数据库中某个字段的所有匹配项吗?

列出数据库中的所有表

使用INFORMATION_SCHEMA.TABLES视图执行此操作。

SELECT   TABLE_NAME, TABLE_TYPE
FROM     AdventureWorks2012_Data.INFORMATION_SCHEMA.TABLES
ORDER BY TABLE_NAME

此查询返回基表和视图。

列出每个模式中的表数

在此示例中,列出了每个模式以及在其中定义的表和视图的数量:

SELECT   TABLE_SCHEMA, Count(TABLE_SCHEMA)
FROM     AdventureWorks2012_Data.INFORMATION_SCHEMA.TABLES
GROUP BY TABLE_SCHEMA

SQL Server目录(Catalog)视图

目录视图是另一种方式,以查看数据字典。如果觉得对象目录视图提供了更多信息,我倾向于在视图上使用INFORMATION_SCHEMA视图。

我发现最有用的一些视图包括:

  • objects——包含每个对象的行,例如数据库中定义的FOREIGN KEYPRIMARY KEY约束。
  • columns——包含对象(如视图或表)的每列的行。
  • tables——为每个表对象返回一行

使用目录(Catalog)视图的示例

以下示例使用Microsoft SQL Server目录视图来获取上面使用INFORMATION_SCHEMA的相同信息。

列出包含指定列的所有表

为了使用特定列获取表的名称,必须同时使用sys.tablessys.columns视图。它们通过object_id连接,用于标识公共数据库对象,例如表和视图。

SELECT     t.name,
           t.type_desc
FROM       AdventureWorks2012_Data.sys.columns AS c
INNER JOIN sys.tables AS t
           ON c.object_id = t.object_id
WHERE      c.name = 'BusinessEntityID'

列出数据库中的所有表

sys.tables视图可用于获取数据库中定义的所有表的名称。此视图返回基表和视图。

SELECT   name,
         type_desc
FROM     AdventureWorks2012_Data.sys.tables
ORDER BY Name

列出每个模式中的表数

sys.tables视图不包含模式名称,因此使用内置函数SCHEMA_NAME来获取它。

SELECT   SCHEMA_NAME(schema_id),
         count(name)
FROM     AdventureWorks2012_Data.sys.tables
GROUP BY SCHEMA_NAME(schema_id)

正如你可以看到的那样,它比使用INFORMATION_SCHEMA更具技术性。但是,我从经验中说,目录视图中包含更多信息。如果您对数据库的结构有特定问题,那么这些是要触及的表。

你可能感兴趣的:(数据库)