摘要:本文描述了 Microsoft SQL Server 2000 查询处理器如何与 OLE DB 提供程序进行交互以实现分布式和异类查询。它面向的读者主要是 OLE DB 提供程序开发人员,并假设读者对 OLE DB 规范有深入的了解。
目录
简介
概述和术语
OLE DB 提供程序交互阶段
查询执行方案
总结
附录 A:SQL Server 采用的 OLE DB 接口
附录 B: 用于生成远程查询的 SQL 子集
简介
本文描述了 Microsoft® SQL Server™ 2000 查询处理器如何与 OLE DB 提供程序进行交互以实现分布式和异类查询。它面向的读者主要是 OLE DB 提供程序开发人员,并假设读者对 OLE DB 规范有深入的了解。本文重点在于描述 SQL Server 查询处理器和 OLE DB 提供程序之间的 OLE DB 接口,而不是分布式查询功能本身。有关分布式查询功能的完整描述,请参阅 SQL Server Books Online。
概述和术语
在 Microsoft SQL Server 2000 中,分布式查询允许 SQL Server 用户访问基于 SQL Server 的服务器以外的数据(位于其他运行 SQL Server 的服务器或是具有 OLE DB 接口的其他数据源中)。OLE DB 提供了统一的方式来访问异类数据源中的列表数据。
在本文中,分布式查询是指任何引用了一个或多个外部 OLE DB 数据源中表或行集的 SELECT、INSERT、UPDATE 或 DELETE 语句。
远程表是指存储于 OLE DB 数据源中并且不在执行查询的 SQL Server 所在服务器上的表。一个分布式查询可以访问一个或多个远程表。
OLE DB 提供程序类别
根据 OLE DB 提供程序在 SQL Server 的分布式查询中的功能,我们将它们划分为如下类别。根据定义,它们并非互相排斥;某种提供程序可能属于一个或多个类别:
- SQL 命令提供程序
- 索引提供程序
- 简单表提供程序
- 非 SQL 命令提供程序
SQL 命令提供程序
凡是以 SQL 标准语法(SQL Server 认可)支持 Command 对象的提供程序,都属于此类别。下面是 OLE DB 提供程序被 SQL Server 视为 SQL 命令提供程序的必要条件:
- 提供程序必须支持 Command 对象及其所有强制 OLE DB 接口:ICommand、ICommandText、IColumnsInfo、ICommandProperties 和 IAccessor。
- 提供程序支持的 SQL 语法必须至少是 SQL 子集。提供程序必须通过 DBPROP_SQLSUPPORT 属性来报告语法。
SQL 命令提供程序的示例为:Microsoft OLE DB Provider for SQL Server 和 Microsoft OLE DB Provider for ODBC。
索引提供程序
索引提供程序支持并提供与 OLE DB 对应的索引,同时还允许基于索引对基本表执行查找。下面是 OLE DB 提供程序被 SQL Server 视为索引提供程序的必要条件:
- 提供程序必须以 TABLES、COLUMNS 和 INDEXES 架构行集支持 IDBSchemaRowset 接口。
- 提供程序必须支持通过 IOpenRowset 打开索引中的行集(通过指定索引名和相应的基本表名称)。
- Index 对象必须支持其所有的强制接口:IRowset、IRowsetIndex、IAccessor、IColumnsInfo、IRowsetInfo 和 IConvertTypes。
- 对带索引基本表打开的行集(通过使用 IOpenRowset)必须支持 IRowsetLocate 接口,以便根据书签在行上定位。
如果一个 OLE DB 提供程序满足以上条件,用户可以设置提供程序选项 Index As Access Path,以允许 SQL Server 使用提供程序的索引来执行查询。默认情况下,除非该选项已被设置,否则 SQL Server 不会尝试使用提供程序的索引。
注意: SQL Server 支持多个影响 SQL Server 访问 OLE DB 提供程序的方法的选项。可以使用 SQL Server 企业管理器中的“链接服务器属性”对话框来设置这些选项。
简单表提供程序
简单表提供程序通过 IOpenRowset 接口来表现根据基本表打开行集的方式。这些提供程序既不是 SQL 命令提供程序也不是索引提供程序;而是 SQL Server 分布式查询所能处理的提供程序中最简单的一类。
对于此类提供程序,SQL Server 仅能在分布式查询运行过程执行表扫描操作。
非 SQL 命令提供程序
该类提供程序支持 Command 对象及其所有强制接口,但不支持 SQL Server 认可的 SQL 标准语法。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页