-
您当前所在位置:首页 → 数据库 → MSSQL → SQL Server 分布式查询:OLE DB连接(一)
SQL Server 分布式查询:OLE DB连接(一)
时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)
-
|
概述和术语
在 Microsoftsql 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 forSQL 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 标准语法。
非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 使用从提供程序获得的扩展错误信息的方
关键词标签:连接,查询,提供,程序,
相关阅读
-
热门文章
SqlServer2005对现有数据进行分区具体步骤sql server系统表损坏的解决方法MS-SQL2005服务器登录名、角色、数据库用户Access、SQL Server、Oracle常见应用的区别
人气排行
如何远程备份(还原)SQL2000数据库配置和注册ODBC数据源-odbc数据源配置教程SQL2000数据库远程导入(导出)数据SQL2000和SQL2005数据库服务端口查看或修改SQL Server 2005降级到2000的正确操作步骤修改Sql Server唯一约束教程浅谈JSP JDBC来连接SQL Server 2005的方法SQL Server创建表语句介绍
查看所有0条评论>>