sql_variant 对日期和时间类型的支持

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

本主题介绍sql_variant数据类型如何支持增强的日期和时间功能。

列属性 SQL_CA_SS_VARIANT_TYPE 用于返回变体结果列的 C 类型。 SQL Server 2008 (10.0.x) 引入了一个附加属性,SQL_CA_SS_VARIANT_SQL_TYPE,该属性在实现行描述符(IRD)中设置变体结果列的 SQL 类型。 SQL_CA_SS_VARIANT_SQL_TYPE还可用于实现参数描述符(IPD),以指定SQL_SS_TIME2或SQL_SS_TIMESTAMPOFFSET参数的 SQL 类型,该参数SQL_C_BINARY C 类型与类型SQL_SS_VARIANT绑定。

SQLColAttribute 可以设置新类型SQL_SS_TIME2和SQL_SS_TIMESTAMPOFFSET。 SQLGetDescField 可以返回SQL_CA_SS_VARIANT_SQL_TYPE。

对于结果列,驱动程序将从变体转换到日期/时间类型。 有关详细信息,请参阅 从 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 时间 SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

规模设置为SQL_DESC_PRECISION(SQLBindParameterDecimalDigits 参数)。
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

规模设置为SQL_DESC_PRECISION(SQLBindParameterDecimalDigits 参数)。
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 规模设置为SQL_DESC_PRECISION(SQLBindParameterDecimalDigits 参数)。
SQL_C_NUMERIC 十进制 精度设置为SQL_DESC_PRECISION(SQLBindParameterColumnSize 参数)。

规模集设置为SQL_DESC_SCALE( SQLBindParameter 的 DecimalDigits 参数)。
SQL_C_SS_TIME2 时间 忽略 SQL_CA_SS_VARIANT_SQL_TYPE
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset 忽略 SQL_CA_SS_VARIANT_SQL_TYPE

另请参阅

日期和时间改进 (ODBC)