从 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
date, datetime, datetime2, datetimeoffset
DBTYPE_DBDATE
date, datetime, datetime2, datetimeoffset (兼容级别低于 9.0。)
DBTYPE_DBTIME
time, datetime, datetime2, datetimeoffset
DBTYPE_DBTIME_EX
time, datetime2, datetimeoffset
DBTYPE_DBTIMESTAMP
time, date, datetime2, datetimeoffset, datetime
DBTYPE_DBTIMESTAMP
time, date, datetime2, datetimeoffset
DBTYPE_DBTIMESTAMP
time, date, datetime2, datetimeoffset
DBTYPE_ARRAY
Error
DBTYPE_BYREF
忽略
DBTYPE_VECTOR
Error
DBTYPE_RESERVED
Error
DBTYPE_XML
xml(只允许在传递查询中使用。)
1numeric(p,s) 指示 SQL Server 数据类型 numeric 的精度为 p,小数位数为 s。
注意
如果必须将数据转换为不同于显示的默认值的 SQL Server 数据类型,则需要进行显式转换(使用 CAST 或 CONVERT 函数)。有关详细信息,请参阅 CAST 和 CONVERT (Transact-SQL)。
DBTYPE 指示器和 DBCOLUMNFLAGS 值信息通过 COLUMNS 架构行集或通过 IColumnsInfo 接口从访问接口获得。对于 COLUMNS 架构行集,DATA_TYPE 和 COLUMN_FLAGS 列表示 DBTYPE 和 DBCOLUMNFLAGS 值。对于 IColumnsInfo::GetColumnInfo 接口,DBCOLUMNINFO 结构的 wType 和 dwFlags 成员表示这些值。