分布式查询的数据类型映射

OLE DB 访问接口根据 OLE DB 类型标识符 DBTYPE 显示其数据的数据类型。通过映射数据,在 OLE DB 数据类型和 SQL Server 系统数据类型之间转换数据类型:

  • 从 OLE DB 数据类型转换到 SQL Server 系统数据类型。这种转换在 SQL Server 从 OLE DB 数据源读取数据时发生(在 SELECT 语句中或 UPDATE、INSERT 和 DELETE 语句的读取过程中)。
  • 从 SQL Server 系统数据类型转换到 OLE DB 数据类型。这种转换在 SQL Server 将数据写入 OLE DB 数据源(主要是在 INSERT 或 UPDATE 语句中)时发生,数据源中被修改的表是远程表。

从 OLE DB 访问接口到 SQL Server 的数据类型映射

从 OLE DB 访问接口到 SQL Server 的数据类型映射定义了所允许的比较和表达式,以及涉及远程数据的有效显式转换。下表显示了该映射。

可以按下列规则概括表达式中远程表列的类型有效性:在相同的上下文中,如果数据类型映射表中对应的映射 SQL Server 数据类型有效,则 Transact-SQL 表达式中的远程列值有效。

例如表达式:local_columnOPERATOR remote_column。在此表达式中,local_column 是本地表列,remote_column 是远程表列。如果 OPERATOR 是本地列数据类型的有效运算符,也是 remote_column 的 DBTYPE 映射到的数据类型的有效运算符,则此表达式有效。

同样,如果 remote_column 的 DBTYPE 映射到 SQL Server 系统数据类型 data_type_2,并且允许从 data_type_2 显式转换到 data_type_1,则允许 CAST(remote_column AS data_type_1)。例如,可以将访问接口端的 DBTYPE_DATE 数据类型列转换为 SQL Server 中的 datetime 列。但是,不能将 DBTYPE_DATE 数据直接转换为 varchar

下表为数据类型映射表。通过使用 DBTYPE 指示器及其列 DBCOLUMNFLAGS 值,可以查找相应的 SQL Server 数据类型。

DBTYPE DBCOLUMNFLAGS SQL Server 数据类型

DBTYPE_I1

numeric(3, 0)1

DBTYPE_I2

smallint

DBTYPE_I4

int

DBTYPE_I8

bigint

DBTYPE_UI1

tinyint

DBTYPE_UI1

numeric(5,0)

DBTYPE_UI1

numeric(10,0)

DBTYPE_UI1

numeric(20,0)

DBTYPE_R4

float

DBTYPE_R8

real

DBTYPE_NUMERIC

numeric

DBTYPE_DECIMAL

decimal

DBTYPE_CY

money

DBTYPE_BSTR

DBCOLUMNFLAGS_ISLONG = true

ntext

DBTYPE_BSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

nchar

DBTYPE_BSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_IDISPATCH

Error

DBTYPE_ERROR

Error

DBTYPE_BOOL

bit

DBTYPE_VARIANT

nvarchar(4000)

DBTYPE_IUNKNOWN

Error

DBTYPE_GUID

uniqueidentifier

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true,或最大列大小 > 8000 字节。

image

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = True,并且对列的大小无长度限制。

varbinary(max)

DBTYPE_BYTES

DBCOLUMNFLAGS_ISROWVER = true,DBCOLUMNFLAGS_ISFIXEDLENGTH = true,且列大小 = 8

timestamp

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

binary

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varbinary

DBTYPE_STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

char

DBTYPE_ STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varchar

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = True,或列的最大大小超过 8,000 个字符。

text

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = True,并且对列的大小无长度限制。

varchar(max)

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXED

nchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = True,或列的最大大小超过 4,000 个字符。

ntext

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = True,并且对列的大小无长度限制。

nvarchar(max)

DBTYPE_UDT

相同的 SQL Server 用户定义类型(如果已注册了一个)。

DBTYPE_DATE

datetime

DBTYPE_DBDATE

datetime(兼容级别低于 9.0。)

DBTYPE_DBTIME

datetime

DBTYPE_DBTIMESTAMP

datetime

DBTYPE_ARRAY

Error

DBTYPE_BYREF

忽略

DBTYPE_VECTOR

Error

DBTYPE_RESERVED

Error

DBTYPE_XML

xml(只允许在传递查询中使用。)

1numeric(p,s) 指示 SQL Server numeric 数据类型的精度为 p,小数位数为 s

ms175970.note(zh-cn,SQL.90).gif注意:
如果必须将数据转换为不同于显示的默认值的 SQL Server 数据类型,则需要进行显式转换(使用 CAST 或 CONVERT 函数)。有关详细信息,请参阅 CAST 和 CONVERT (Transact-SQL)

DBTYPE 指示器和 DBCOLUMNFLAGS 值信息通过 COLUMNS 架构行集或通过 IColumnsInfo 接口从访问接口获得。对于 COLUMNS 架构行集,DATA_TYPE 和 COLUMN_FLAGS 列表示 DBTYPE 和 DBCOLUMNFLAGS 值。对于 IColumnsInfo::GetColumnInfo 接口,DBCOLUMNINFO 结构的 wTypedwFlags 成员表示这些值。

从 SQL Server 到 OLE DB 访问接口的数据类型映射

通过使用上表中显示的映射,将 SQL Server 系统数据类型映射到 OLE DB 类型。如果存在下列任一条件,则允许从 SQL Server 类型 S1 映射到特定 OLE DB 类型 T

  • 可以在数据类型映射表中找到相应的映射。
  • 允许将数据类型 S1 隐式转换为另一种 SQL Server 数据类型 S2,并且数据类型映射表中定义了从 S2T 的映射。

请参阅

概念

分布式查询的使用准则
分布式查询

其他资源

数据类型 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助