Mappage des types de données à l'aide des requêtes distribuées

Un fournisseur OLE DB présente les types de ses données en termes d'identificateurs de type OLE DB appelés DBTYPE. Les types de données sont convertis entre les types de données OLE DB et les types de données système SQL Server en mappant les données :

  • Des types de données OLE DB aux types de données système SQL Server. Cette conversion a lieu lorsque SQL Server lit les données à partir de la source de données OLE DB, dans des instructions SELECT ou dans des instructions UPDATE, INSERT ou DELETE.
  • Des types de données système SQL Server aux types de données OLE DB. Cette conversion a lieu lorsque SQL Server écrit des données, principalement dans des instructions INSERT et UPDATE, dans la source de données OLE DB dans laquelle la table modifiée est une table distante.

Mappage des types de données du fournisseur OLE DB vers SQL Server

Ce mappage de types de données du fournisseur OLE DB vers SQL Server définit les comparaisons et les expressions autorisées, ainsi que les conversions explicites valides qui impliquent des données distantes. Le mappage est présenté dans le tableau ci-dessous.

La validité des types des colonnes des tables distantes dans les expressions peut être résumée par la règle suivante : la valeur d'une colonne distante est valide dans une expression Transact-SQL si le type de données SQL Server mappé correspondant, répertorié dans le tableau Mappage des types de données, est valide dans le même contexte.

Par exemple, considérons l'expression suivante : local_column OPERATOR remote_column. Dans cette expression*,* local_column est une colonne de table locale et remote_column est une colonne de table distante. L'expression est valide si OPERATOR est un opérateur valide pour le type de données de la colonne locale et pour le type de données sur lequel l'indicateur DBTYPE de remote_column est mappé.

De même, CAST(remote_column AS data_type_1) est autorisé si l'indicateur DBTYPE de remote_column est mappé sur le type de données système SQL Server data_type_2 et si la conversion explicite de data_type_2 vers data_type_1 est autorisée. Par exemple, une colonne de type de données DBTYPE_DATE côté fournisseur peut être convertie en colonne datetime dans SQL Server. Cependant, les données DBTYPE_DATE ne peuvent pas être converties directement en varchar.

Le tableau ci-dessous correspond au tableau de mappage des types de données. En utilisant l'indicateur DBTYPE et sa valeur DBCOLUMNFLAGS pour une colonne, vous pouvez connaître le type de données SQL Server correspondant.

DBTYPE DBCOLUMNFLAGS Type de données 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

Erreur

DBTYPE_ERROR

Erreur

DBTYPE_BOOL

bit

DBTYPE_VARIANT

nvarchar(4000)

DBTYPE_IUNKNOWN

Erreur

DBTYPE_GUID

uniqueidentifier

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true ou taille maximale de colonne > 8 000 octets

image

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true et la taille de colonne a une longueur illimitée.

varbinary(max)

DBTYPE_BYTES

DBCOLUMNFLAGS_ISROWVER = true, DBCOLUMNFLAGS_ISFIXEDLENGTH = true et taille de colonne = 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 ou taille maximale de colonne > 8 000 caractères.

text

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = true et la taille de colonne a une longueur illimitée.

varchar(max)

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXED

nchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true ou taille maximale de colonne > 4,000 caractères.

ntext

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true et la taille de colonne a une longueur illimitée.

nvarchar(max)

DBTYPE_UDT

Type SQL Server équivalent défini par l'utilisateur, s'il en existe un d'inscrit.

DBTYPE_DATE

datetime

DBTYPE_DBDATE

datetime (Niveau de compatibilité inférieur à 9.0.)

DBTYPE_DBTIME

datetime

DBTYPE_DBTIMESTAMP

datetime

DBTYPE_ARRAY

Erreur

DBTYPE_BYREF

Ignoré

DBTYPE_VECTOR

Erreur

DBTYPE_RESERVED

Erreur

DBTYPE_XML

xml (Autorisé uniquement dans les requêtes pass-through).

1numeric(p,s) indique un type de données SQL Server numeric avec une précision p et une échelle s.

ms175970.note(fr-fr,SQL.90).gifRemarque :
Si des données doivent être converties dans un type de données SQL Server différent du type par défaut indiqué dans le tableau ci-dessus, il est nécessaire d'effectuer une conversion explicite à l'aide de la fonction CAST ou CONVERT. Pour plus d'informations, consultez CAST et CONVERT (Transact-SQL).

Les données de l'indicateur DBTYPE et de la valeur DBCOLUMNFLAGS sont transmises par le fournisseur par l'intermédiaire de l'ensemble de lignes du schéma COLUMNS ou de l'interface IColumnsInfo. Pour l'ensemble de lignes du schéma COLUMNS, les colonnes DATA_TYPE et COLUMN_FLAGS représentent les valeurs DBTYPE et DBCOLUMNFLAGS. Pour l'interface IColumnsInfo::GetColumnInfo, les membres wType et dwFlags de la structure DBCOLUMNINFO représentent ces valeurs.

Mappage des types de données de SQL Server vers le fournisseur OLE DB

Les types de données système SQL Server sont mappés sur les types OLE DB à l'aide du mappage présenté dans le tableau précédent. Le mappage d'un type SQL Server S1 sur un type OLE/DB T spécifique est autorisé si l'une des conditions suivantes est respectée :

  • Le mappage correspondant figure dans le tableau de mappage des types de données.
  • Il existe une conversion implicite autorisée du type de données S1 vers un autre type de données SQL Server S2 et un mappage de S2 sur T est défini dans le tableau de mappage des types de données.

Voir aussi

Concepts

Consignes pour l'utilisation des requêtes distribuées
Requêtes distribuées

Autres ressources

Types de données (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005