Types CLR volumineux définis par l’utilisateur (ODBC)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

SQL Server Native Client (souvent abrégé en SNAC) a été supprimé dans SQL Server 2022 (16.x) et SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB pour SQL Server (SQLOLEDB) hérité ne sont pas recommandés dans les nouveaux développements. Utilisez à la place le nouveau Microsoft OLE DB Driver (MSOLEDBSQL) pour SQL Server ou le Microsoft ODBC Driver for SQL Server le plus récent. Pour SQLNCLI fourni en tant que composant du moteur de base de données SQL Server (versions 2012 à 2019), consultez cette exception de cycle de vie de support.

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 obtenir un exemple montrant la prise en charge ODBC pour les UDT CLR volumineux, consultez Prise en charge des grands UDT.

Pour plus d’informations sur la prise en charge des types CLR de grande taille dans SQL Server Native Client, consultez Types de User-Defined CLR volumineux.

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
UDT CLR SQL_SS_UDT -151 (sqlncli.h)

Le tableau suivant indique la correspondance entre la structure et le type ODBC C. Essentiellement, l’UDT CLR 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 qui contient l’UDT. Nom du catalogue qui contient l’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 l’UDT.
SQL_CA_SS_UDT_TYPE_NAME Nom de l’UDT. Nom de l’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 doivent toujours être définis 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 retournées dans les champs IRD sont les suivantes :

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 qui contient l’UDT. Nom du catalogue qui contient l’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 de l’UDT. Nom de l’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 la 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 de l’UDT. Nom de l’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 qui contient l’UDT. Nom du catalogue qui contient l’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. Ils sont ajoutés après les colonnes définies par ODBC, mais avant les colonnes spécifiques au pilote existantes du jeu de résultats SQLColumns ou SQLProcedureColumns.

Aucune ligne n’est retournée par SQLGetTypeInfo, pour des UDT individuelles 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 Soutenu*
SQL_C_BINARY Pris en charge
SQL_C_CHAR Soutenu*

* 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 Soutenu*
SQL_C_BINARY Pris en charge
SQL_C_CHAR Soutenu*

* 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 2005 UDT varbinary(max)
SQL Server 2008 et ultérieur 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 colonne de résultats UDT sont converties de SQL en types de données C, comme décrit dans la section « Liaisons et conversions », plus haut dans cette rubrique.

SQLBindParameter

Les valeurs requises pour les UDT sont les suivantes :

Type de données SQL Type de paramètre 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 décrites dans la section « Métadonnées de colonne retournées par SQLColumns et SQLProcedureColumns (métadonnées du 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 colonne de résultats UDT sont converties de SQL en types de données C, comme décrit dans la section « Liaisons et conversions », plus haut dans cette rubrique.

SQLFetchScroll

Les valeurs de colonne de résultats UDT sont converties de SQL en types de données C, comme décrit dans la section « Liaisons et conversions », plus haut dans cette rubrique.

SQLGetData

Les valeurs de colonne de résultats UDT sont converties de SQL en types de données C, comme décrit dans la section « Liaisons et conversions », plus haut dans 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 Scale
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 des paramètres UDT sont converties de C en types de données SQL, comme décrit dans la section « Liaisons et conversions », plus haut dans 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 Scale
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.

Voir aussi

Types CLR volumineux définis par l’utilisateur