MSSQL

SQL Server 分布式查询:OLE DB连接(三)

日期:2015/6/28来源: IT猫扑网

用于远程查询执行的提供程序属性

如果提供程序支持的SQL 功能没有包含在 DBPROP_SQLSUPPORT 报告的语法级别中,可以通过使用各种提供程序特有的属性来指出它们。



提供程序能够通过使用名为SQLPROPSET_OPTHINTS 的SQL Server 特殊属性集来支持这些属性,并获得已定义的 PROPID 值。属性集SQLPROPSET_OPTHINTS 和这两个属性通过使用以下常数来定义:



extern const GUIDSQLPROPSET_OPTHINTS = { 0x2344480c, 0x33a7, 0x11d1, 

{ 0x9b, 0x1a, 0x0, 0x60, 0x8, 0x26, 0x8b, 0x9e } };

enumSQLPROPERTIES {

SQLPROP_NESTEDQUERIES = 0x4,

        SQLPROP_DYNAMICSQL = 0x5,

        SQLPROP_GROUPBY = 0x6,

        SQLPROP_DATELITERALS = 0x7,

        SQLPROP_ANSILIKE = 0x8,

        SQLPROP_INNERJOIN = 0x9,

        SQLPROP_SUBQUERIES = 0x10

   };



隐含的字符集和排序顺序

SQL Server 2000支持在列级别上指定字符数据的排序。排序包括非 Unicode 字符数据(charvarchar 列)的字符集和排序顺序规范。对于Unicode数据(ncharnvarchar 列),排序只指定了排序顺序。

只有在链接服务器使用的字符集(非 Unicode 数据)、排序顺序、字符串比较语法和本地服务器一致时,SQL Server 2000 才将字符串比较操作委派给提供程序。

在链接服务器是SQL Server时,SQL Server自动确定排序的兼容性。对于其他提供程序,系统管理员必须为SQL Server 指出给定的链接服务器上的字符数据的排序方式。在SQL Server 2000中,支持名为Collation Name的新的链接服务器选项。如果系统管理员确定链接服务器上采用的排序语法和SQL Server 标准语法一致,就能将Collation Name选项设置为排序名。Collation Name选项能够使用系统存储过程sp_serveroption 来设置。只有满足了如下两个条件时才应该设置该选项:



为了向下兼容,仍支持SQL Server 7.0 中的 Collation Compatible 选项。将其设置为true 等于将 Collation Name 选项设置为SQL Server 主数据库的默认排序方式。新的应用程序应使用 Collation Name 选项,而不是 Collation Compatible 选项。

索引访问

SQL Server 使用提供程序列出的索引来执行分布式查询的某些谓词。该方案只能在用户设置提供程序选项Index as access Path时才能用于索引提供程序。下面是在使用索引执行查询时SQL Server 在提供程序上运行的主要高级步骤:

  1. 通过使用完整的表名和索引名调用 IOpenRowset::OpenRowset 来打开索引行集。完整表名和索引名依据前面的远程查询方案中所述的方式生成。

  2. 通过使用完整表名调用 IOpenRowset::OpenRowset 来打开基本表行集。

  3. 通过调用 IRowsetIndex::SetRange 根据查询谓词设置索引行集的范围。

  4. 通过索引行集上的 IRowset 扫描索引行集的行。

  5. 使用检索到的索引行中的书签列来通过 IRowsetLocate::GetRowsByBookmark 从基本表行集中获取相应的行。



在基本表上打开行集时,行集属性 DBPROP_IRowsetLocate 和 DBPROP_BOOKMARKS 是必需的。

单纯表扫描

SQL Server 扫描提供程序的整个远程表并在本地运行所有的查询命令。通过调用IOpenRowset::OpenRowset 打开表中相应的行集。SQL Server使用目录、架构和对象名部分按以下方式来构造提供给 OPENROWSET 的表名:

  1. 每一个名称段都使用提供程序的引用字符 (DBLITERAL_QUOTE) 引用,然后使用 DBLITERAL_CATALOG_SEPARATOR 字符连接它们。

  2. 行集对象打开后,SQL Server 使用 IColumnsInfo 接口来验证该表运行时元数据是否和编译时的元数据一致。

  3. SQL Server 使用 IRowset 接口浏览并使用表中的行。使用 IRowset::GetNextRows 获取行,使用 IRowset::RestartPosition 来重定位行集的起始点,使用 IRowset::ReleaseRows 释放行。



UPDATE和DELETE语句

要从SQL Server 分布式查询中对远程表进行更新和删除,必须满足如下条件:



下列行集属性是在被更新的表中打开的行集所必需的:DBPROP_IRowsetLocate、DBPROP_IRowsetChange 和 DBPROP_BOOKMARKS。将DBPROP_UPDATABILITY 行集属性设置为 DBPROPVAL_UP_CHANGE 还是 DBPROPVAL_UP_DELETE 取决于执行的操作是 UPDATE 还是 DELETE。

以下是在提供程序上运行 UPDATE 或 DELETE 操作的高级步骤:

  1. SQL Server 通过 IOpe

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消