Types CLR volumineux définis par l'utilisateur (ODBC)
Cette rubrique traite des modifications apportées à ODBC dans SQL Server Native Client pour prendre en charge les types CLR volumineux définis par l'utilisateur.
Pour plus d'informations sur la prise en charge des types CLR volumineux définis par l'utilisateur dans SQL Server Native Client, consultez Types CLR volumineux définis par l'utilisateur.
Format de données
SQL Server Native Client utilise SQL_SS_LENGTH_UNLIMITED pour indiquer que la taille d'une colonne est supérieure à 8 000 octets pour les types d'objets LOB. Depuis SQL Server 2008, la même valeur est utilisée pour les types CLR définis par l'utilisateur lorsque leur taille est supérieure à 8 000 octets.
Les valeurs UDT sont représentées sous la forme de tableaux d'octets. Les conversions en chaînes hexadécimales de même que les conversions depuis des chaînes hexadécimales sont prises en charge. Les valeurs littérales sont représentées sous forme de chaînes hexadécimales avec le préfixe « 0x ».
Le tableau suivant montre le mappage des types de données dans les paramètres et les jeux de résultats :
Type de données SQL Server |
Type de données SQL |
Valeur |
---|---|---|
Type CLR défini par l'utilisateur |
SQL_SS_UDT |
-151 (sqlncli.h) |
Le tableau suivant indique la correspondance entre la structure et le type ODBC C. Fondamentalement, le type CLR défini par l'utilisateur est un type varbinary avec des métadonnées supplémentaires.
Type de données SQL |
Disposition en mémoire |
Type de données C |
Valeur (sqlext.h) |
---|---|---|---|
SQL_SS_UDT |
SQLCHAR * (caractère non signé *) |
SQL_C_BINARY |
SQL_BINARY (-2) |
Champs de descripteur pour les paramètres
Les informations suivantes sont retournées dans les champs IPD :
Champ de descripteur |
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
---|---|---|
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_SCHEMA_NAME |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_TYPE_NAME |
Nom du type défini par l'utilisateur (UDT). |
Nom du type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
Nom complet du type défini par l'utilisateur (UDT). |
Nom complet du type défini par l'utilisateur (UDT). |
Pour les paramètres UDT, SQL_CA_SS_UDT_TYPE_NAME doit toujours être défini via SQLSetDescField. SQL_CA_SS_UDT_CATALOG_NAME et SQL_CA_SS_UDT_SCHEMA_NAME sont facultatifs.
Si l'UDT est défini dans la même base de données avec un schéma différent de celui de la table, SQL_CA_SS_UDT_SCHEMA_NAME doit être défini.
Si l'UDT est défini dans une base de données différente de celle de la table, SQL_CA_SS_UDT_CATALOG_NAME et SQL_CA_SS_UDT_SCHEMA_NAME doivent être définis.
En cas d'erreurs ou d'omissions dans les paramètres de SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME ou SQL_CA_SS_UDT_SCHEMA_NAME, un enregistrement de diagnostic est généré avec SQLSTATE HY000 et un message spécifique au serveur.
Champs de descripteur pour les résultats
Les informations suivantes sont retournées dans les champs IRD :
Champ de descripteur |
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_DISPLAY_SIZE |
2n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LITERAL_PREFIX |
"0x" |
"0x" |
SQL_DESC_LITERAL_SUFFIX |
"" |
"" |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_SEARCHABLE |
SQL_PRED_NONE |
SQL_PRED_NONE |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_SCHEMA_NAME |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_TYPE_NAME |
Nom du type défini par l'utilisateur (UDT). |
Nom du type défini par l'utilisateur (UDT). |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
Nom complet du type défini par l'utilisateur (UDT). |
Nom complet du type défini par l'utilisateur (UDT). |
Métadonnées de colonne retournées par SQLColumns et SQLProcedureColumns (métadonnées de catalogue)
Les valeurs de colonne suivantes sont retournées pour les types définis par l'utilisateur (UDT) :
Nom de colonne |
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
---|---|---|
DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
TYPE_NAME |
Nom du type défini par l'utilisateur (UDT). |
Nom du type défini par l'utilisateur (UDT). |
COLUMN_SIZE |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
BUFFER_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
DECIMAL_DIGITS |
NULL |
NULL |
SQL_DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DATETIME_SUB |
NULL |
NULL |
CHAR_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SS_UDT_CATALOG_NAME |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
Nom du catalogue contenant le type défini par l'utilisateur (UDT). |
SS_UDT_SCHEMA_NAME |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
Nom du schéma contenant le type défini par l'utilisateur (UDT). |
SS_UDT_ASSEMBLY_TYPE_NAME |
Nom complet du type défini par l'utilisateur (UDT). |
Nom complet du type défini par l'utilisateur (UDT). |
Les trois dernières colonnes sont spécifiques au pilote. Elles sont ajoutées après toute colonne définie par ODBC, mais avant toute colonne existante spécifique au pilote du jeu de résultats de SQLColumns ou SQLProcedureColumns.
Aucune ligne n'est retournée par SQLGetTypeInfo, pour les UDT individuels ou pour le type générique "udt".
Liaisons et conversions
Les conversions suivantes sont prises en charge entre les types de données SQL et C :
Conversion vers et depuis : |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
Prise en charge * |
SQL_C_BINARY |
Prise en charge |
SQL_C_CHAR |
Prise en charge * |
* Les données binaires sont converties en chaîne hexadécimale.
Les conversions suivantes sont prises en charge entre les types de données C et SQL :
Conversion vers et depuis : |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
Prise en charge * |
SQL_C_BINARY |
Prise en charge |
SQL_C_CHAR |
Prise en charge * |
* La conversion d'une chaîne hexadécimale et données binaire est réalisée.
Prise en charge des UDT par SQL_VARIANT
Les UDT ne sont pas pris en charge dans les colonnes SQL_VARIANT.
Prise en charge des UDT par BCP
Les valeurs UDT ne peuvent être importées et exportées qu'en tant que valeurs de type character ou binary.
Comportement des clients de niveau inférieur pour les UDT
Les UDT sont mappés aux clients de niveau inférieur de la manière suivante :
Version du serveur |
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
---|---|---|
SQL Server 2000 |
varbinary |
image |
SQL Server 2005 |
UDT |
varbinary(max) |
SQL Server 2008 |
UDT |
UDT |
Fonctions ODBC prenant en charge les types CLR volumineux définis par l'utilisateur
Cette section indique les modifications apportées aux fonctions ODBC SQL Server Native Client au niveau des types CLR volumineux définis par l'utilisateur.
SQLBindCol
Les valeurs de colonnes de résultats de l'UDT sont converties du type de données SQL en type de données C comme décrit dans la section « Liaisons et conversions » de cette rubrique.
SQLBindParameter
Les valeurs requises pour les UDT sont les suivantes :
Type de données SQL |
Parametertype |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLColAttribute
Les valeurs retournées pour les UDT sont celles décrites dans la section « Champs de descripteur pour les résultats », plus haut dans cette rubrique.
SQLColumns
Les valeurs retournées pour les UDT sont celles décrites dans la section « Métadonnées de colonne retournées par SQLColumns et SQLProcedureColumns (métadonnées de catalogue) », plus haut dans cette rubrique.
SQLDescribeCol
Les valeurs retournées pour les UDT sont les suivantes :
Type de données SQL |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLDescribeParam
Les valeurs retournées pour les UDT sont les suivantes :
Type de données SQL |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLFetch
Les valeurs de colonnes de résultats de l'UDT sont converties du type de données SQL en type de données C comme décrit dans la section « Liaisons et conversions » de cette rubrique.
SQLFetchScroll
Les valeurs de colonnes de résultats de l'UDT sont converties du type de données SQL en type de données C comme décrit dans la section « Liaisons et conversions » de cette rubrique.
SQLGetData
Les valeurs de colonnes de résultats de l'UDT sont converties du type de données SQL en type de données C comme décrit dans la section « Liaisons et conversions » de cette rubrique.
SQLGetDescField
Les champs de descripteur disponibles avec les nouveaux types sont décrits dans les sections « Champs de descripteur pour les paramètres » et « Champs de descripteur pour les résultats », plus haut dans cette rubrique.
SQLGetDescRec
Les valeurs retournées pour les UDT sont les suivantes :
Type de données SQL |
Type |
Sous-type |
Longueur |
Précision |
Échelle |
---|---|---|---|---|---|
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLGetTypeInfo
Les valeurs retournées pour les UDT sont celles décrites dans la section « Métadonnées de colonne retournées par SQLColumns et SQLProcedureColumns (métadonnées de catalogue) », plus haut dans cette rubrique.
SQLProcedureColumns
Les valeurs retournées pour les UDT sont celles décrites dans la section « Métadonnées de colonne retournées par SQLColumns et SQLProcedureColumns (métadonnées de catalogue) », plus haut dans cette rubrique.
SQLPutData
Les valeurs de paramètre UDT sont converties du type de données C en type de données SQL, comme décrit dans la section « Liaisons et conversions » de cette rubrique.
SQLSetDescField
Les champs de descripteur disponibles avec les nouveaux types sont décrits dans les sections « Champs de descripteur pour les paramètres » et « Champs de descripteur pour els résultats », plus haut dans cette rubrique.
SQLSetDescRec
Les valeurs autorisées pour les UDT sont les suivantes :
Type de données SQL |
Type |
Sous-type |
Longueur |
Précision |
Échelle |
---|---|---|---|---|---|
SQL_SS_UDT (longueur inférieure ou égale à 8 000 octets) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (longueur supérieure à 8 000 octets) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLSpecialColumns
Les valeurs retournées pour les UDT des colonnes DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH et DECIMAL_DIGTS sont celles décrites dans « Métadonnées retournés par SQLColumns et SQLProcedureColumns (métadonnées de catalogue) », plus haut dans cette rubrique.