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

Otros recursos

Tipos de datos (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005