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.
Remarque : |
---|
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)