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.