Prise en charge de sql_variant pour les types Date et Time

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

Cette rubrique décrit comment le type de données sql_variant prend en charge les fonctionnalités de date et d’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 (10.0.x) introduit un attribut supplémentaire, SQL_CA_SS_VARIANT_SQL_TYPE, qui définit le type SQL d’une colonne de résultat variant dans le descripteur de ligne d’implémentation (IRD). 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 peuvent être retournés 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 en C. Lors de la liaison à SQL_C_BINARY, la longueur de la mémoire tampon doit être suffisamment 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

La mise à l’échelle est définie sur SQL_DESC_PRECISION (paramètre DecimalDigits de SQLBindParameter).
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

La mise à l’échelle est définie sur SQL_DESC_PRECISION (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 La mise à l’échelle est définie sur SQL_DESC_PRECISION (paramètre DecimalDigits de SQLBindParameter).
SQL_C_NUMERIC Décimal La précision est définie sur SQL_DESC_PRECISION (paramètre ColumnSize de SQLBindParameter).

Groupe identique sur SQL_DESC_SCALE (paramètre DecimalDigits de SQLBindParameter).
SQL_C_SS_TIME2 time SQL_CA_SS_VARIANT_SQL_TYPE est ignoré
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE est ignoré

Voir aussi

Améliorations de la date et de l’heure (ODBC)