Prise en charge de sql_variant pour les types Date et 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). 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 | Precision a la valeur 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é |