Partager via


Prise en charge sql_variant pour les types Date/Time

Cette rubrique décrit la façon dont le type de données sql_variant prend en charge les fonctionnalités de date et heure améliorées.

L'attribut de colonne SQL_CA_SS_VARIANT_TYPE est utilisé pour retourner le type C d'une colonne de résultat de variante. SQL Server 2008 a introduit un attribut supplémentaire, SQL_CA_SS_VARIANT_SQL_TYPE, qui définit le type SQL d'une colonne de résultat de variante dans le descripteur de ligne d'implémentation (IRD, Implementation Row Descriptor). SQL_CA_SS_VARIANT_SQL_TYPE peut également être utilisé dans le descripteur de paramètre d'implémentation (IPD, Implementation Parameter Descriptor) pour spécifier le type SQL d'un paramètre SQL_SS_TIME2 ou SQL_SS_TIMESTAMPOFFSET qui a le type de C SQL_C_BINARY lié au type SQL_SS_VARIANT.

Les nouveaux types SQL_SS_TIME2 et SQL_SS_TIMESTAMPOFFSET peuvent être définis par SQLColAttribute. SQL_CA_SS_VARIANT_SQL_TYPE peut être retourné par SQLGetDescField.

Pour les colonnes de résultats, le pilote effectue une conversion de la variante vers les types date/heure. Pour plus d'informations, consultez Conversions de SQL à C. Lors de la liaison à SQL_C_BINARY, la longueur de la mémoire tampon doit être assez grande pour recevoir le struct qui correspond au type SQL.

Pour les paramètres SQL_SS_TIME2 et SQL_SS_TIMESTAMPOFFSET, le pilote convertit les valeurs C en valeurs sql_variant, comme décrit dans le tableau ci-dessous. Si un paramètre est lié en tant que SQL_C_BINARY et que le type de serveur est SQL_SS_VARIANT, il est traité comme une valeur binaire à moins que l'application n'ait défini SQL_CA_SS_VARIANT_SQL_TYPE sur un autre type SQL. Dans ce cas, SQL_CA_SS_VARIANT_SQL_TYPE est prioritaire ; autrement dit, si SQL_CA_SS_VARIANT_SQL_TYPE est défini, il substitue le comportement par défaut consistant à déduire le type SQL variant du type C.

Type C

Type de serveur

Commentaires

SQL_C_CHAR

varchar

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_WCHAR

nvarcar

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_TINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_STINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_SHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_SSHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_USHORT

int

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_LONG

int

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_SLONG

int

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_ULONG

bigint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_SBIGINT

bigint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_FLOAT

real

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_DOUBLE

float

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_BIT

bit

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_UTINYINT

tinyint

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_BINARY

varbinary

SQL_CA_SS_VARIANT_SQL_TYPE n'est pas défini.

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

L'échelle est définie à SQL_DESC_PRECISION (le paramètre DecimalDigits de SQLBindParameter).

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

L'échelle est définie à SQL_DESC_PRECISION (le paramètre DecimalDigits de SQLBindParameter).

SQL_C_TYPE_DATE

date

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_TYPE_TIME

time(0)

SQL_CA_SS_VARIANT_SQL_TYPE est ignoré.

SQL_C_TYPE_TIMESTAMP

datetime2

L'échelle est définie à SQL_DESC_PRECISION (le paramètre DecimalDigits de SQLBindParameter).

SQL_C_NUMERIC

decimal

La précision est définie à SQL_DESC_PRECISION (le paramètre ColumnSize de SQLBindParameter).

L'échelle est définie à SQL_DESC_SCALE (le paramètre DecimalDigits de SQLBindParameter).