由键集驱动的游标对 OLE DB 访问接口的要求

仅当满足下列条件时,由 Transact-SQL 键集驱动的游标才能引用远程表:

  • 分布式查询必须满足在声明由键集驱动的游标的 DECLARE CURSOR 语句中所使用的 SELECT 语句的要求。有关由键集驱动的游标支持的 Transact-SQL 条件的详细信息,请参阅 DECLARE CURSOR (Transact-SQL)

  • 查询中的所有本地表必须有唯一索引。远程表的索引应通过 IDBSchemaRowset 接口的 INDEXES 行集来显示。

OLE DB 访问接口的索引要求

SQL Server 可以使用 OLE DB 访问接口的表索引来评估某些查询。要为 SQL Server 使用索引,访问接口应公开 OLE DB 接口,以便能够扫描索引行集、使用索引列值在索引行集中进行搜索并能够使用从索引行集获得的书签设置基表行集中的行位置。

仅当索引行集和表行集与 SQL Server 实例位于同一台计算机上时,使用 OLE DB 访问接口的索引才会提高性能。因此,仅当数据源与 SQL Server 位于同一台计算机上时才应设置“作为访问路径的索引”选项。

仅当满足下列条件时,SQL Server 才能使用 OLE DB 访问接口的索引:

  • 访问接口必须支持带有 TABLES、COLUMNS 和 INDEXES 架构行集的 IDBSchemaRowset 接口。

  • 访问接口必须支持通过 IOpenRowset(指定索引名称和相应的基表名称)打开索引行集。

  • 索引对象必须支持其所有必需的接口:IRowsetIRowsetIndexIAccessorIColumnsInfoIRowsetInfoIConvertTypes

  • 通过 IOpenRowset 在索引基表上打开的行集必须支持 IRowsetLocate 接口,以定位不以从索引行集获得的书签为基础的基表中的行。

如果 OLE DB 访问接口满足了上述要求,则 SQL Server 管理员可以设置“作为访问路径的索引”访问接口选项以使 SQL Server 能够使用该访问接口的索引来评估查询。如果未设置此选项,默认情况下,SQL Server 不尝试使用该访问接口的索引。

可更新的键集游标要求

通过对分布式查询定义的键集游标可以更新或删除远程表。例如:UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name。

下面是允许使用分布式查询中的可更新游标的条件:

  • 访问接口应满足远程表上的更新和删除条件。有关详细信息,请参阅 OLE DB 访问接口的 UPDATE 和 DELETE 语句要求

  • 所有游标操作都必须在可重复读隔离级别或可序列化隔离级别下,在显式用户事务或多语句事务中进行。

通过使用 ITransactionJoin 接口,访问接口必须支持分布式事务。