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

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

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

导读:* 表示如果 SQL Server 中没有确切的等价数据类型,则转换为某种形式的 SQL Server 类型。这种转换将导致精确度降低、上溢或下溢。如果 SQL Server 的未来版本支持相应的数据类型,则默认的隐式映射可能会改变。注意: numeric(p,s) 表示 SQL Server 的数据类型 numeric 精度为 p,刻度为 s 。对于 DBTYPE_NUMERIC 和 DBTYPE_DECIMAL,允许使用的最大精度为 38。创建访问器时,提供程序必须支持以 DBTYPE_WSTR 绑定到 DBTYPE_BSTR 列。DBTYPE_VARIANT 列当作 Unicode 字符串 nvarchar 使用。这需要提供程序支持从 DBTYPE_VARIANT 向 DBTYPE_WSTR 的转换。提供程序应按照 OLE DB 的定义实现该转换。有关详细信息,请参阅附录 A:SQL Server 采用的 OLE DB 接口。解释数据类型映射是否映射对 SQL Server 类型由 OLE DB 数据类型和描述该列或数量值的 DBCOLUMNFLAGS 值共同

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

* 表示如果 SQL Server 中没有确切的等价数据类型,则转换为某种形式的 SQL Server 类型。这种转换将导致精确度降低、上溢或下溢。如果 SQL Server 的未来版本支持相应的数据类型,则默认的隐式映射可能会改变。

注意: numeric(p,s) 表示 SQL Server 的数据类型 numeric 精度为 p,刻度为 s 。对于 DBTYPE_NUMERIC 和 DBTYPE_DECIMAL,允许使用的最大精度为 38。创建访问器时,提供程序必须支持以 DBTYPE_WSTR 绑定到 DBTYPE_BSTR 列。DBTYPE_VARIANT 列当作 Unicode 字符串 nvarchar 使用。这需要提供程序支持从 DBTYPE_VARIANT 向 DBTYPE_WSTR 的转换。提供程序应按照 OLE DB 的定义实现该转换。有关详细信息,请参阅附录 A:SQL Server 采用的 OLE DB 接口。

解释数据类型映射

是否映射对 SQL Server 类型由 OLE DB 数据类型和描述该列或数量值的 DBCOLUMNFLAGS 值共同确定。在使用 COLUMNS 架构行集时,由 DATA_TYPE 和 COLUMN_FLAGS 列来代表这些值。在使用 IColumnsInfo::GetColumnInfo 接口时,由 DBCOLUMNINFO 结构的 wType 和 dwFlags 成员代表这些信息。

若要在包括特定的 DBTYPE 和 DBCOLUMNFLAG 值的给定列上用使用端映射,应在该表中寻找相应的 SQL Server 类型。在表达式中远程表的列的类型规则可以通过如下的简单规则描述:

给定远程列的值在 Transact-SQL 表达式中是合法的条件为,它在上表中所映射的 SQL Server 类型在相同的上下文中是合法的。

表和规则定义:

  • 比较和表达式。

    通常,如果 <op> 是可用于 X 数据类型和 <远程列> 所映射数据类型上的有效运算符,则 X <op> <远程列> 就是一个有效表达式。

  • 显式转换。

    允许 Convert (X, <远程列>) 的条件:<远程列> 的 DBTYPE 映射为本地数据类型 Y(如上表所示)而且允许从 Y 到 X 的显式转换。

如果用户要将远程数据转换为非默认本地数据类型,则必须使用显示转换。

若要在对远程表使用 UPDATE 和 INSERT 语句时使用导出端映射,应使用同样的表将本地的 SQL Server 数据类型映射为 OLE DB 数据类型。如果下述情况之一存在,则允许将 SQL Server 类型 (S1) 映射为给定的 OLE DB 类型 (T):

  • 相应的映射可以在映射表(表 3)中直接找到。

  • 允许 S1 隐式转换为另一种 SQL Server 类型 S2,而 S2 对类型 T 的映射包含在映射表(表 3)中。

大对象 (LOB) 的处理

如映射表(表 3)中所述,如果 DBTYPE_STR、DBTYPE_WSTR 或 DBTYPE_BSTR 类型的列也报告 DBCOLUMNFLAGS_ISLONG,或者它们的最大长度超过 4,000 个字符(或未报告最大长度),SQL Server 将相应把它们处理为 text 或 ntext 列。类似地,对于 DBTYPE_BYTES 列,如果设置了 DBCOLUMNFLAGS_ISLONG,或最大长度大于 8,000 个字节(或未报告最大长度),该列将被视为 image 列。Text、ntext 和 image 列称为 LOB 列。

SQL Server 不会在 OLE DB 提供程序的 LOB 上列出完整的文本或图像功能。在 OLE DB 提供程序的大对象上不支持 TEXTPTRS 的;因此,也不支持相关的功能,例如,TEXTPTR 系统函数以及 READTEXT、WRITETEXT 和 UPDATETEXT 语句。支持检索整个 LOB 列的 SELECT 语句,也支持对远程表上整个大对象列的 UPDATE 和 INSERT 语句。

如果提供程序支持 LOB 列上的结构化存储接口,SQL Server 将使用它们。结构化存储接口如下所示(按优先权和功能的递增顺序排列):ISequentialStream、Istream 和 ILockBytes。如果提供程序支持这些接口中的一个或多个,当通过 IDBProperties 接口查询提供程序时,它必须将 DBPROPVAL_OO_BLOB 作为 DBPROP_OLEOBJECTS 属性的值返回。同样,提供程序应在 DBPROP_STRUCTUREDSTORAGE 属性中指出它所支持的接口。

如果提供程序不支持 LOB 列上的任何结构化存储接口,SQL Server 2000 将在自身实现该接口,同时仍将它们按 text、ntext 或 image 列列出。

访问 LOB 列

如果提供程序支持结构化存储接口之一,SQL Server 在查询运行时按如下步骤检索 LOB 列:

  1. 在通过 IOpenRowset::OpenRowset 打开行集合前,SQL Server 请求对大对象列上的一个或多个结构化存储接口(ISequentialStream、Istream 和 ILockBytes)的支持。提供程序支持的第一个接口是必需的;而其他接口则是可选的,可通过将 DBPROP 结构的 dwOptions 元素设置为 DBPROPOPTIONS_SETIFCHEAP 来请求它们。例如,如果提供程序同时支持 ISequentialStream 和 ILockBytes ,则 ISequentialStream 是必需的,而 ILockBytes 则是可选的。

  2. 打开行集后,SQL Server 使用 IRowsetInfo::GetProperties 来识别行集中可用的实际接口。提供程序返回的最后一个或最优先接口将被使用。当 SQL Server 创建基于大对象列的访问器时,该列绑定为 DBTYPE_IUNKNOWN,绑定中 DBOBJECT 结构的 iid 元素设置为接口。

上一页  [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