查询 SQL Server 系统目录

对于没有进行硬编码以便与特定的表和视图集一起工作的动态应用程序,它必须具有一种机制用于确定任何与之相连的数据库中对象的结构和属性。这些应用程序可能需要如下信息:

  • 数据库中表和视图的数目和名称。
  • 表或视图中的列数以及每一列的名称、数据类型、小数位数和精度。
  • 为表定义的约束。
  • 为表定义的索引和键。

SQL Server 2005 系统目录为 SQL Server 数据库提供此信息。SQL Server 2005 系统目录的核心是一个视图集,这些视图显示了描述 SQL Server 实例中的对象的元数据。元数据是描述系统中对象属性的数据。基于 SQL Server 的应用程序可以使用以下方式访问系统目录中的信息:

  • 目录视图。建议使用这种访问方法。
  • 信息架构视图。
  • OLE DB 架构行集。
  • ODBC 目录函数。
  • 系统存储过程和函数。

目录视图

SQL Server 2005 引入了目录视图,将其作为系统目录元数据的全新关系界面。通过这些视图可以访问服务器上各数据库中存储的元数据。

ms189082.note(zh-cn,SQL.90).gif注意:
目录视图不提供对复制、SQL Server 代理或备份元数据的访问。

建议使用目录视图访问元数据,原因如下:

  • 所有元数据都作为目录视图提供。
  • 目录视图以一种独立于所有目录表实现的格式来表示元数据,因此,不受基础目录表变化的影响。
  • 目录视图是访问核心服务器元数据的最有效的方式。
  • 目录视图是目录元数据的常规界面,提供了获取、转换以及表示此自定义形式的元数据的最直接的方式。
  • 目录视图名称和它们的列名称是说明性的。查询结果将与具备该功能(与正被查询的元数据相对应)中等知识的用户期望一致。
ms189082.note(zh-cn,SQL.90).gif重要提示:
在 SQL Server 的未来版本中,Microsoft 可能会通过在列列表的末尾添加列来扩充任何系统目录视图的定义。我们建议不要在生产代码中使用语法 SELECT * FROM sys.catalog_view_name,这是因为返回的列数可能会更改并破坏应用程序的运行。

有关使用目录视图查询系统目录的示例,请参阅查询 SQL Server 系统目录常见问题

信息架构视图

信息架构视图是基于 SQL-92 标准中的目录视图定义。它们以一种独立于所有目录表实现的格式来表示目录信息,因此不受基础目录表变化的影响。使用这些视图的应用程序可在符合 SQL-92 标准的异类数据库系统之间移植。有关详细信息,请参阅信息架构视图 (Transact-SQL)

ms189082.note(zh-cn,SQL.90).gif注意:
信息架构视图不包含 SQL Server 2005 特有的元数据。

兼容性视图

在 SQL Server 2005 中,许多 SQL Server 早期版本中的系统表现在都实现为视图集。这些视图称为兼容性视图,它们仅用于向后兼容。它们显示的元数据与 SQL Server 2000 中提供的相同。但是,它们不显示与 SQL Server 2005 中引入的功能关联的任何元数据。因此,当使用新功能(例如,Service Broker 或分区)时,必须切换至使用目录视图。这是升级至目录视图的一个充分原因。升级至目录视图的另外一个原因是存储用户 ID 和类型 ID 的兼容性视图列可能返回 NULL 或触发器算术溢出。这是因为在 SQL Server 2005 中可以创建超过 32,767 个用户和数据类型。例如,如果您要创建 32,768 个用户,然后运行查询 SELECT * FROM sys.sysusers;并且 ARITHABORT 设置为 ON,则查询将因算术溢出错误而失败。如果 ARITHABORT 设置为 OFF,uid 列将返回 NULL。

为避免出现这些问题,建议升级到使用可以处理增加的用户 ID 和类型 ID 数量的新目录视图。

OLE DB 架构行集

OLE DB 规范定义了一个 IDBSchemaRowset 接口,该接口公开了一组包含目录信息的架构行集。OLE DB 架构行集是显示不同的 OLE DB 访问接口所支持的目录信息的标准方法。行集独立于基础目录表的结构。有关详细信息,请参阅 Schema Rowset Support (OLE DB)

SQL Native Client OLE DB 访问接口支持 IDBSchemaRowset 的扩展插件,该扩展插件可报告分布式查询中使用的链接服务器的目录信息。有关详细信息,请参阅 LINKEDSERVERS Rowset (OLE DB)

ODBC 目录函数

ODBC 规范定义了一组目录函数,该目录函数能够返回包含目录信息的结果集。这些函数是显示不同的 ODBC 驱动程序所支持的目录信息的标准方法。结果集独立于基础目录表结构。

SQL Native Client ODBC 驱动程序支持两种驱动程序特有的功能,这些功能为用于分布式查询的链接服务器报告目录信息。有关详细信息,请参阅Using Catalog Functions

系统存储过程和函数

Transact-SQL 定义了返回目录信息的服务器系统存储过程和系统函数。虽然这些存储过程和函数为 SQL Server 所特有,但它们使用户与基础系统目录表的结构隔离开了。有关详细信息,请参阅元数据函数 (Transact-SQL)系统存储过程 (Transact-SQL)

请参阅

任务

元数据可见性故障排除

概念

查询 SQL Server 系统目录常见问题

其他资源

系统视图 (Transact-SQL)
系统表 (Transact-SQL)
目录视图 (Transact-SQL)
兼容性视图 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助