SQL Server 使用 OPENROWSET 功能支持两种远程数据对象命名协议:基于链接服务器的四段式名称和特殊名称。
基于链接服务器的名称
链接服务器是对 OLE DB 数据源的抽象。基于链接服务器的名称分为四段:<链接服务器>.<目录>.<架构>.<对象>,其中 <链接服务器> 是链接服务器的名称。SQL Server 将 <链接服务器> 视为 OLE DB 提供程序和连接属性(用于向提供程序标识数据源)的来源。其他三个名称段被 OLE DB 数据源解释为对特定远程表的标识。
特殊名称
特殊名称是基于 OPENROWSET 或 OPENDATASOURCE 函数的名称。它包括在分布式查询中每次引用远程表时的所有连接信息(包括所使用的 OLE DB 提供程序、用于标识数据源的属性、用户 ID 和密码)。
默认情况下,只允许系统管理员使用特殊名称。要使用基于 OLE DB 提供程序的特殊名称,应将提供程序的 DisallowAdhocAccess 选项设置为 0。
如果使用链接服务器名称,SQL Server 将在链接服务器定义中为 OLE DB 提供程序提取提供程序的名称和初始化属性。如果使用特殊名称,SQL Server 将从 OPENROWSET 函数的参数中提取相同的信息。
有关使用四段式名称建立链接服务器和基于特殊名称的语法的详细说明,请参阅 SQL Server Books Online。
连接 OLE DB 提供程序
以下是 SQL Server 连接 OLE DB 提供程序时执行的高级步骤。
- SQL Server 创建数据源对象。
SQL Server 使用提供程序的 ProgID 来建立数据源对象 (DSO) 的实例。ProgID 被指定为链接服务器配置信息的 provider_name 参数,或在使用特殊名称时被指定为 OPENROWSET 函数的第一个参数。
SQL Server 通过 OLE DB 服务组件接口 IDataInitialize 创建提供程序的 DSO 实例。这使服务组件管理器可以在提供程序的本地功能上集成其服务(例如回滚和支持更新)。另外,通过 IDataInitialize 建立提供程序的实例还允许 OLE DB 服务组件为它们提供连接池,这样可减少连接和初始化的开销。
在 SQL Server 的进程中还是在一个独立的进程中创建给定提供程序的实例,可以根据需要进行配置。在独立的进程中创建实例能够保护 SQL Server 进程免受提供程序故障的影响。但同时还存在着与在 SQL Server 进程外组织 OLE DB 调用有关的性能开销。通过设置提供程序选项 Allow In Process,可以将提供程序配置为进程内实例或进程外实例。有关设置提供程序选项的详细信息,请参阅 SQL Server Books Online。
要学习更多有关 OLE DB 服务组件和建立会话池的知识,请参阅提供程序的 OLE DB 文档。
- 初始化数据源。
创建 DSO 之后,如果服务器的配置选项 remote login timeout 大于 0,IDBProperties 接口将设置 DBPROP_INIT_TIMEOUT 初始化属性;该属性为必需的属性。
如果在链接服务器定义或 OPENROWSET 函数的第二个参数中指定或隐含了下列属性,则它们将被设置:
- DBPROP_INIT_PROVIDERSTRING
- DBPROP_INIT_DATASOURCE
- DBPROP_INIT_LOCATION
- DBPROP_INIT_CATALOG
- DBPROP_AUTH_USERID
- DBPROP_AUTH_PASSWORD
设置了这些属性后,将调用 IDBInitialize::Initialize 以指定的属性初始化 DSO。
- DBPROP_INIT_PROVIDERSTRING
- SQL Server 收集特定提供程序的信息。
SQL Server 将收集若干用于分布式查询执行中的提供程序属性;这些属性将通过调用 IDBProperties::GetProperties 来检索。这些属性全都是可选的;但是,对所有相关属性的支持将允许 SQL Server 充分利用提供程序的功能。例如,在确定 SQL Server 是否能够向提供程序发送查询时,需要使用 DBPROP_SQLSUPPORT。如果提供程序不支持该属性,SQL Server 就不能将远程提供程序用作 SQL 命令提供程序,即使它是一个 SQL 命令提供程序。在下表(表 1)中,“默认值”列列出了在提供程序不支持该属性时 SQL Server 所采用的值。
表 1:SQL Server OLE-DB 提供程序采用的属性
属性默认值用法DBPROP_DBMSNAME无用于错误信息。DBPROP_DBMSVER无用于错误信息。DBPROP_PROVIDERNAME无用于错误信息。DBPROP_PROVIDEROLEDBVER1.5用于确定 2.0 功能的可用性。DBPROP_CONCATNULLBEHAVIOR无用于确定提供程序的 NULL 连接行为是否与 SQL Server 一致。DBPROP_NULLCOLLATION无只有在 NULLCOLLATION 符合 SQL Server 的 Null 排序规则时才允许排序/使用索引。DBPROP_OLEOBJECTS无确定提供程序是否支持大数据对象列的结构化存储接口。DBPROP_STRUCTUREDSTORAGE无确定支持哪种用于大对象类型的结构化存储接口( ILockBytes、Istream 和 ISequentialStream 三种接口之一)。DBPROP_MULTIPLESTORAGEOBJECTSFalse确定是否支持同时打开一个以上的大对象列。DBPROP_SQLSUPPORT无确定是否能够向提供程序发送 SQL 查询。DBPROP_CATALOGLOCATIONDBPROPVAL_CL_START用于构造多段表名。SQLPROP_DYNAMICSQLFalseSQL Server 特有的属性:如果返回 VARIANT_TRUE,则指示参数标记 '?' 可以用于参数化查询执行。SQLPROP_NESTEDQUERIESFalseSQL Server 特有的属性:如果返回 VARIANT_TRUE,则指示提供程序在 FROM 子句中支持嵌套的 SELECT 语句。SQLPROP_GROUPBYFalseSQL Server 特有的属性:如果返回 VARIANT_TRUE,则指示提供程序支持在 SELECT 语句中使用 GROUP BY 子句(如 SQL-92 标准所规定的一样)。SQLPROP_DATELITERALSFalseSQL Server 特有的属性:如果返回 VARIANT_TRUE,则指示提供程序支持各 SQL Server Transact-SQL 语法所规定的日期时间文字。SQLPROP_ANSILIKEFalseSQL Server 特有的属性:该属性对支持 SQL-Minimum 级别的提供程序比较有意义,并且它支持各 SQL-92 entry 级别所规定的 LIKE 运算符(使用 '%' 和 '_' 作为通配符)。SQLPROP_SUBQUERIESFalseSQL Server 属性:该属性对支持 SQL-Minimum 级别的提供程序比较有意义。它指示提供程序支持 SQL-92 Entry 级别所规定的子查询。包括 SELECT 序列和 WHERE 子句中的子查询(支持相关子查询以及 IN、EXISTS、ALL 和 ANY 运算符)。SQLPROP_INNERJOINFalseSSQL Server 特有的属性:该属性对支持 SQL-Minimum 级别的提供程序比较有意义。它指示支持在 FROM 子句中使用多表的联接。上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页