非 SQL 命令提供程序的两个示例是:Microsoft OLE DB Provider for Indexing Service 和 Microsoft Windows NT® Active Directory™ Service Interfaces (ADSI) OLE DB Provider。
Transact-SQL 子集
如果提供程序支持所需的 OLE DB 接口,下列 Transact-SQL 语句类别都可以用于分布式查询。
- 除了将远程表作为目的表的 SELECT INTO 语句外,其他所有的 SELECT 语句都可以使用。
- 如果提供程序支持插入操作所需的接口,INSERT 语句可以用于远程表。有关 INSERT 语句的 OLE DB 要求的详细信息,请查阅本文后面的 INSERT 语句。
- 如果提供程序满足 OLE DB 接口在特定表上的要求,UPDATE 和 DELETE 语句也可以用于远程表。有关更新或删除远程表时 OLE DB 接口必须满足的要求和条件,请参阅本文后面的 UPDATE 和 DELETE 语句。
游标支持
如果提供程序支持所需的 OLE DB 功能,则分布式查询支持快照和键集两种游标。分布式查询不支持动态游标。用户请求的分布式查询的动态游标将自动降级为键集游标。
快照游标在游标打开时被写入,而且结果集保持不变;对基本表的更新、插入和删除操作不会反映到游标中。
键集游标在游标打开时被写入,而且结果集在游标的整个生存期中保持不变。但是,如果更新或删除基本表中的行,当访问这些行时,能够在游标中看到变化。如果对基本表的插入操作可能影响游标成员,则这种变化则是不可见的。
如果提供程序满足更新和删除远程表的条件,则可以通过使用分布式查询中定义的游标以及对远程表的引用来更新和删除远程表,例如:table UPDATE | DELETE <远程表> WHERE CURRENT OF <游标名称>。有关详细信息,请参阅本文后面的 UPDATE 和 DELETE 语句。
支持键集游标的要求
如果满足所有 Transact-SQL 语法的条件,而且满足以下两种情况之一,那么在分布式查询中就支持键集游标:
- 在查询中,OLE DB 提供程序支持所有远程表上的可重用书签。可重用书签可以从给定表的某个行集中隐去,然后用于同一表中的其他行集上。对可重用书签的支持是通过 IDBSchemaRowset 的 TABLES_INFO 架构行集来指定的,方法是将 BOOKMARK_DURABILITY 列设置为 BMK_DURABILITY_INTRANSACTION 或某种更高的持久性。
- 所有的远程表都通过 IDBSchemaRowset 接口的 INDEXES 行集来列出唯一键。应该存在一个索引项,其中的 UNIQUE 列设置为 VARIANT_TRUE。
包含 OpenQuery 函数的分布式查询不支持键集游标。
支持可更新键集游标的要求
通过在分布式查询上定义的键集游标,可以更新或删除远程表,例如:UPDATE | DELETE <远程表> WHERE CURRENT OF <游标名称>。下面是在分布式查询中允许使用可更新游标的条件:
- 如果提供程序也满足对远程表进行更新和删除操作的条件,就允许使用可更新游标。有关详细信息,请参阅本文后面的 UPDATE 和 DELETE 语句。
- 所有的可更新键集游标操作必须位于使用可复读或更高的隔离级别的用户定义事务中。此外,提供程序必须以 ITransactionJoin 接口支持分布式事务处理。
OLE DB 提供程序交互阶段
所有分布式查询的执行方案都有六种操作:
- 建立连接和检索属性操作,指定 SQL Server 连接 OLE DB 提供程序的方法以及将用到提供程序的哪些属性。
- 表名解析和检索元数据操作,指定 SQL Server 将远程表名称(指定时使用两种方法之一:基于链接服务器的名称或特殊名称)解析为提供程序中相应数据对象的方法。这也包括 SQL Server 为编译和优化分布式查询从提供程序检索的表元数据。
- 事务管理操作,指定所有与 OLE DB 提供程序的事务相关的交互。
- 数据类型处理操作,该操作指定在执行分布式查询过程中,当 SQL Server 从 OLE DB 提供程序获得数据或向其导出数据时 SQL Server 处理 OLE DB 数据类型的方法。
- 错误处理操作,指定 SQL Server 使用从提供程序获得的扩展错误信息的方法。
- 安全性操作,指定 SQL Server 安全性和提供程序安全性的交互方式。
建立连接和检索属性
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页