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

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

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

导读:如果不支持 IDBSchemaRowset 并且远程表名称包含了目录或架构名,则 SQL Server 将要求 IDBSchemaRowset 并返回一个错误。但是,如果既没有提供目录名,也没有提供架构名,SQL Server 将打开对应于远程表的行集,并从行集对象的强制接口 IColumnsInfo 中检索列元数据。SQL Server 通过调用 IOpenRowset::OpenRowset 打开对应于表的行集。提供给 OPENROWSET 的表名是由目录、架构和对象名等部分构成的。 名称的每个部分(目录、架构、对象名)都使用提供程序的引用符 (DBLITERAL_QUOTE) 引用,然后使用 DBLITERAL_CATALOG_SEPARATOR 字符和 DBLITERAL_SCHEMA_SEPARATOR 字符连接到一起。名称的构造遵循 IOpenRowset 中的 OLE DB 规则。在行集对象打开后,可通过 IColumnsInfo::GetColumnInfo 检索表中的列元数据。 如果 IDBSchemaRowset 不支持 TABLES、COLUM

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

如果不支持 IDBSchemaRowset 并且远程表名称包含了目录或架构名,则 SQL Server 将要求 IDBSchemaRowset 并返回一个错误。但是,如果既没有提供目录名,也没有提供架构名,SQL Server 将打开对应于远程表的行集,并从行集对象的强制接口 IColumnsInfo 中检索列元数据。

SQL Server 通过调用 IOpenRowset::OpenRowset 打开对应于表的行集。提供给 OPENROWSET 的表名是由目录、架构和对象名等部分构成的。

  • 名称的每个部分(目录、架构、对象名)都使用提供程序的引用符 (DBLITERAL_QUOTE) 引用,然后使用 DBLITERAL_CATALOG_SEPARATOR 字符和 DBLITERAL_SCHEMA_SEPARATOR 字符连接到一起。名称的构造遵循 IOpenRowset 中的 OLE DB 规则。

  • 在行集对象打开后,可通过 IColumnsInfo::GetColumnInfo 检索表中的列元数据。

如果 IDBSchemaRowset 不支持 TABLES、COLUMNS 和 TABLES_INFO 行集,SQL Server 将打开两次基本表上的行集:在查询编译时打开一次来检索元数据,在查询运行时再打开一次。由于打开行集而受影响的提供程序(例如,运行更改实时设备状态的代码,发送电子邮件,运行任意用户提供的代码)必须注意这种行为。

检索统计信息

如果提供程序支持基本表上的分布式统计,那么 SQL Server 2000 将使用这些统计。有两种统计可用于 SQL Server 查询处理器:

  • 列(或元组)基数:它是在一个表的列(或一组列)中唯一值的数目。可用于依据列评估谓词的选择性。支持分布式统计的提供程序必须支持至少一种基数。

  • 柱状图:如果值的分布不均匀,则唯一值的数目对于评估谓词的选择性是不够充分的。在此情况下,提供一个柱状图即可就表中列值的分布提供更好的图形化信息。

有了统计就能使 SQL Server 查询优化程序更好地评估一个查询中的中间操作的基数,这将使它生成更好的执行方案。

OLE DB 提供程序应支持以下分布式统计:

  • 强制:支持属性 (1) DBPROP_TABLESTATISTICS,该属性指示是否支持列或元组基数以及是否支持柱状图;和属性 (2) DBPROP_OPENROWSETSUPPORT,该属性使用 DBPROPVAL_ORS_HISTOGRAM 位来指示是否支持柱状图。

  • 强制:TABLE_STATISTICS 架构行集。TABLE_STATISTICS 架构行集列出了给定数据库中可用的统计。它也包含了架构行集本身的列或元组基数,同时指示了特定列是否支持柱状图。为了使 SQL Server 能够使用统计,此架构行集中的 TABLE_NAME、STATISTICS_NAME、STATISTICS_TYPE、COLUMN_NAME 和 ORDINAL_POSITION 列是强制的。COLUMN_CARDINALITY 或 TUPLE_CARDINALITY 中至少有一个是强制的。如果支持柱状图,则 NO_OF_RANGES 也是强制的。

  • 可选:可选地,如果提供程序支持柱状图,它应支持 IOpenRowset::OpenRowset 方法的增强功能(允许通过指定相应统计的 DBID 来打开一个柱状图行集)。

有关统计接口的完整信息,请参阅 OLE DB 2.6 规范。

约束

如果 OLE DB 提供程序支持 OLE DB 2.6 的新架构行集 CHECK_CONSTRAINTS_BY_TABLE,SQL Server 2000 查询优化程序也可以使用远程数据源中基本表上的 CHECK 约束。架构行集的 CHECK_CLAUSE 列将返回符合 SQL-92 语法的 CHECK 子句谓词。查询优化程序使用约束信息来消除或简化因表中约束的存在而总为真或总为假的谓词。

事务管理

SQL Server 通过使用提供程序的 ITransactionLocal(用于本地事务)和 ITransactionJoin(用于分布式事务)OLE DB 接口支持以事务方式访问分布式数据。通过启动提供程序的本地事务,SQL Server 可保证单元写操作。通过使用分布式事务,SQL Server 可确保包括多个节点的事务在所有节点中都有同样的结果(无论是提交还是终止)。如果提供程序不支持必要的 OLE DB 事务相关接口,根据本地事务的环境将不允许针对该提供程序进行更新操作。

下表(表 2)描述了在用户执行分布式查询(给定了提供程序的功能和本地事务的环境)时发生的事情。针对提供程序的读操作是指一条 SELECT 语句,或者指远程表用在 SELECT INTO、INSERT、UPDATE 或 DELETE 语句的输入端的情形。针对提供程序的写操作是指 INSERT、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