Asignación de tipos de datos con consultas distribuidas
Un proveedor OLE DB expone los tipos de datos de sus datos en forma de identificadores de tipos OLE DB denominados DBTYPE. Los tipos de datos OLE DB se convierten a tipos de datos del sistema de SQL Server, y viceversa, mediante las siguientes asignaciones de datos:
- De tipos de datos OLE DB a tipos de datos del sistema de SQL Server. Esta conversión se produce cuando SQL Server lee los datos del origen de datos OLE DB, ya sea en instrucciones SELECT o en la fase de lectura de las instrucciones UPDATE, INSERT o DELETE.
- De tipos de datos del sistema de SQL Server a tipos de datos OLE DB. Esta conversión se produce cuando SQL Server escribe datos, normalmente en instrucciones INSERT o UPDATE, en el origen de datos OLE DB donde la tabla modificada es una tabla remota.
Asignación de tipos de datos del proveedor OLE DB a tipos de datos de SQL Server
La asignación de tipos de datos OLE DB a tipos de datos de SQL Server define las comparaciones y expresiones permitidas, y las conversiones explícitas válidas que requieren el uso de datos remotos. La asignación se muestra en la tabla siguiente.
La validez de los tipos de columnas de tablas remotas en las expresiones se puede resumir con esta regla: un valor de columna remota es válido en una expresión Transact-SQL si el tipo de datos SQL Server correspondiente de la tabla de asignación de tipos de datos es válido en el mismo contexto.
Considere, por ejemplo, la expresión: local_column OPERATOR remote_column. En esta expresión*,* local_column es una columna de tabla local y remote_column es una columna de tabla remota. La expresión es válida si OPERATOR es un operador válido para el tipo de datos de la columna local y para el tipo de datos al que se asigna el valor DBTYPE de remote_column.
De forma similar, CAST(remote_column AS data_type_1) se permite si el valor DBTYPE de remote_column se asigna al tipo de datos del sistema data_type_2 de SQL Server y se admite la conversión explícita de data_type_2 a data_type_1. Por ejemplo, una columna del tipo de datos DBTYPE_DATE del proveedor se puede convertir en una columna datetime de SQL Server. Sin embargo, los datos DBTYPE_DATE no se pueden convertir directamente en varchar.
A continuación, se muestra la tabla de asignación de tipos de datos. Utilice el indicador DBTYPE y el valor DBCOLUMNFLAGS de una columna para encontrar el tipo de datos correspondiente de SQL Server.
DBTYPE | DBCOLUMNFLAGS | Tipo de datos de 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 o el tamaño máximo de columna es > 8.000 bytes. |
image |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISLONG = true y el tamaño de columna tiene una longitud ilimitada. |
varbinary(max) |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISROWVER = true, DBCOLUMNFLAGS_ISFIXEDLENGTH = true y el tamaño de columna = 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 o el tamaño máximo de columna es > 8.000 caracteres. |
text |
DBTYPE_STR |
DBCOLUMNFLAGS_ISLONG = true y el tamaño de columna tiene una longitud ilimitada. |
varchar(max) |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISFIXED |
nchar |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = false |
nvarchar |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISLONG = true o el tamaño máximo de columna es > 4.000 caracteres. |
ntext |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISLONG = true y el tamaño de columna tiene una longitud ilimitada. |
nvarchar(max) |
DBTYPE_UDT |
Tipo equivalente de SQL Server definido por el usuario, si está registrado. |
|
DBTYPE_DATE |
datetime |
|
DBTYPE_DBDATE |
datetime (el nivel de compatibilidad es menor que 9.0.) |
|
DBTYPE_DBTIME |
datetime |
|
DBTYPE_DBTIMESTAMP |
datetime |
|
DBTYPE_ARRAY |
Error |
|
DBTYPE_BYREF |
Se omite |
|
DBTYPE_VECTOR |
Error |
|
DBTYPE_RESERVED |
Error |
|
DBTYPE_XML |
xml (se admite sólo en consultas de paso a través) |
1numeric(p,s) indica el tipo de datos numeric de SQL Server, con precisión p y escala s.
[!NOTA] Si es necesario convertir los datos en un tipo de datos de SQL Server distinto del valor predeterminado que se muestra, se deberá realizar una conversión explícita con la función CAST o CONVERT. Para obtener más información, vea CAST y CONVERT (Transact-SQL).
La información del indicador DBTYPE y del valor DBCOLUMNFLAGS se obtiene del proveedor, a través del conjunto de filas del esquema COLUMNS o a través de la interfaz IColumnsInfo. Para el conjunto de filas del esquema COLUMNS, las columnas DATA_TYPE y COLUMN_FLAGS representan los valores DBTYPE y DBCOLUMNFLAGS. Para la interfaz IColumnsInfo::GetColumnInfo, los miembros wType y dwFlags de la estructura DBCOLUMNINFO representan estos valores.
Asignación de tipos de datos desde SQL Server al proveedor OLE DB
Los tipos de datos del sistema de SQL Server se asignan a los tipos OLE DB como se indicaba en la tabla anterior. Se puede asignar un tipo S1 de SQL Server a un tipo T determinado de OLE DB siempre que se cumpla alguna de estas condiciones:
- En la tabla de asignación de tipos de datos se puede encontrar la asignación correspondiente.
- Existe una conversión implícita permitida del tipo de datos S1 en otro tipo de datos (S2) de SQL Server, y se define una asignación de S2 a T en la tabla de asignación de tipos de datos.
Vea también
Conceptos
Instrucciones para utilizar consultas distribuidas
Consultas distribuidas