当前位置:学学看123知识中心电脑教学数据库教程Microsoft SQL Server 2000 分布式查询:OLE DB 连接» 正文

Microsoft SQL Server 2000 分布式查询:OLE DB 连接

[06-11 18:18:55]   来源:http://www.xxk123.com  数据库教程   阅读:8231

导读:提供程序能够通过使用名为 SQLPROPSET_OPTHINTS 的 SQL Server 特殊属性集来支持这些属性,并获得已定义的 PROPID 值。属性集 SQLPROPSET_OPTHINTS 和这两个属性通过使用以下常数来定义:extern const GUID SQLPROPSET_OPTHINTS = { 0x2344480c, 0x33a7, 0x11d1, { 0x9b, 0x1a, 0x0, 0x60, 0x8, 0x26, 0x8b, 0x9e } };enum SQLPROPERTIES {SQLPROP_NESTEDQUERIES = 0x4, SQLPROP_DYNAMICSQL = 0x5, SQLPROP_GROUPBY = 0x6, SQLPROP_DATELITERALS = 0x7, SQLPROP_ANSILIKE = 0x8, SQLPROP_INNERJOIN = 0x9, SQLPROP_SUBQUERIES = 0x10

Microsoft SQL Server 2000 分布式查询:OLE DB 连接,标签:sql数据库教程,access数据库教程,http://www.xxk123.com

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

extern const GUID SQLPROPSET_OPTHINTS = { 0x2344480c, 0x33a7, 0x11d1,    { 0x9b, 0x1a, 0x0, 0x60, 0x8, 0x26, 0x8b, 0x9e } };enum SQLPROPERTIES {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 字符数据(char 和 varchar 列)的字符集和排序顺序规范。对于 Unicode 数据(nchar 和 nvarchar 列),排序只指定了排序顺序。

只有在链接服务器使用的字符集(非 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 排序一致。

  • OLE DB 提供程序使用的字符串比较的语法符合 SQL-92 标准规范或等同于 SQL Server 的比较语法。

为了向下兼容,仍支持 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 分布式查询中对远程表进行更新和删除,必须满足如下条件:

  • 提供程序必须支持在被更新或删除的表上使用 IOpenRowset 打开的行集的书签。

  • 提供程序必须支持在被更新或删除的表上使用 IOpenRowset 打开的行集合上的 IRowsetLocate 和 IRowsetChange 接口。

  • IRowsetChange 接口必须支持更新 (SetData) 和删除 (DeleteRows) 方法。

  • 如果提供程序不支持 ITransactionLocal,则仅在该提供程序设置了 Non-transacted 选项且语句不在用户事务中时,才允许使用 UPDATE/DELETE 语句。

  • 如果提供程序不支持 ITransactionJoin,只有不在用户事务中时才允许 UPDATE/DELETE 语句。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]  下一页


Tag:数据库教程sql数据库教程,access数据库教程电脑教学 - 数据库教程
前一篇:关于ORACLE连接池

Copyright 学学看123 All Right Reserved.

1 2 3 4 5 6 7 8 9 10