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 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). |