sql_variant 对日期和时间类型的支持
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)
本主题介绍 sql_variant 数据类型如何支持增强的日期和时间功能。
列属性 SQL_CA_SS_VARIANT_TYPE 用于返回变体结果列的 C 类型。 SQL Server 2008 (10.0.x) 引入了一个附加属性SQL_CA_SS_VARIANT_SQL_TYPE,该属性在实现行描述符 (IRD) 中设置变体结果列的 SQL 类型。 还可以在实现参数描述符 (IPD) 中使用 SQL_CA_SS_VARIANT_SQL_TYPE,以指定将 SQL_C_BINARY C 类型与 SQL_SS_VARIANT 类型绑定的 SQL_SS_TIME2 或 SQL_SS_TIMESTAMPOFFSET 参数的 SQL 类型。
SQL_SS_TIME2和SQL_SS_TIMESTAMPOFFSET的新类型可由 SQLColAttribute 设置。 SQL_CA_SS_VARIANT_SQL_TYPE可由 SQLGetDescField 返回。
对于结果列,驱动程序将从变体转换到日期/时间类型。 有关详细信息,请参阅 从 SQL 到 C 的转换。绑定到 SQL_C_BINARY 时,缓冲区长度必须足够大,才能接收对应于 SQL 类型的结构。
对于SQL_SS_TIME2和SQL_SS_TIMESTAMPOFFSET参数,驱动程序会将 C 值转换为 sql_variant 值,如下表所述。 如果参数被绑定为 SQL_C_BINARY 并且服务器类型是 SQL_SS_VARIANT,那么,除非应用程序已将 SQL_CA_SS_VARIANT_SQL_TYPE 设置为其他某个 SQL 类型,否则该参数将被视为二进制值。 这种情况下,SQL_CA_SS_VARIANT_SQL_TYPE 优先;就是说,如果设置 SQL_CA_SS_VARIANT_SQL_TYPE,它将覆盖从 C 类型推导出变体 SQL 类型的默认行为。
C 类型 | 服务器类型 | 注释 |
---|---|---|
SQL_C_CHAR | varchar | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_WCHAR | nvarcar | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_TINYINT | smallint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_STINYINT | smallint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_SHORT | smallint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_SSHORT | smallint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_USHORT | int | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_LONG | int | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_SLONG | int | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_ULONG | bigint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_SBIGINT | bigint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_FLOAT | real | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_DOUBLE | FLOAT | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_BIT | bit | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_UTINYINT | tinyint | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_BINARY | varbinary | SQL_CA_SS_VARIANT_SQL_TYPE 未设置。 |
SQL_C_BINARY | time | SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2 Scale 设置为SQL_DESC_PRECISION (SQLBindParameter) 的 DecimalDigits 参数。 |
SQL_C_BINARY | datetimeoffset | SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET Scale 设置为SQL_DESC_PRECISION (SQLBindParameter) 的 DecimalDigits 参数。 |
SQL_C_TYPE_DATE | date | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_TYPE_TIME | time(0) | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE。 |
SQL_C_TYPE_TIMESTAMP | datetime2 | Scale 设置为SQL_DESC_PRECISION (SQLBindParameter) 的 DecimalDigits 参数。 |
SQL_C_NUMERIC | Decimal | 精度设置为SQL_DESC_PRECISION (SQLBindParameter) 的 ColumnSize 参数。 规模集SQL_DESC_SCALE (SQLBindParameter) 的 DecimalDigits 参数。 |
SQL_C_SS_TIME2 | time | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE |
SQL_C_SS_TIMESTAMPOFFSET | datetimeoffset | 忽略 SQL_CA_SS_VARIANT_SQL_TYPE |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈