本主题介绍日期和时间数据类型的实现参数描述符(IPD)和实现行描述符(IRD)字段中返回的内容。
IPD 字段中返回的信息
在 IPD 字段中返回以下信息:
| 参数类型 | 日期 | 时间 | smalldatetime | datetime | datetime2 | 日期时间偏移量 |
|---|---|---|---|---|---|---|
| SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
| SQL_DESC_CONCISE_TYPE | SQL类型日期 | SQL_SS_TIME2 | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_SS_TIMESTAMPOFFSET |
| SQL_DESC_DATETIME_INTERVAL_CODE | SQL_CODE_DATE | 0 | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | 0 |
| SQL_DESC_DATETIME_INTERVAL_PRECISION | 10 | 8,10..16 | 16 | 23 | 19、21..27 | 26、28..34 |
| SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
| SQL_DESC_LENGTH | 10 | 8,10..16 | 16 | 23 | 19、21..27 | 26、28..34 |
| SQL_DESC_OCTET_LENGTH | 6 | 12 | 4 | 8 | 16 | 20 |
| SQL_DESC_PRECISION | 0 | 0..7 | 0 | 3 | 0..7 | 0..7 |
| SQL_DESC_SCALE | 0 | 0..7 | 0 | 3 | 0..7 | 0..7 |
| SQL_DESC_TYPE | SQL类型日期 | SQL_SS_TYPE_TIME2 | SQL_DATETIME | SQL_DATETIME | SQL_DATETIME | SQL_SS_TIMESTAMPOFFSET |
| SQL_DESC_TYPE_NAME | date |
time |
smalldatetime 在 IRD 中, datetime2 在 IPD 中 |
datetime 在 IRD 中, datetime2 在 IPD 中 |
datetime2 |
日期时间偏移量 |
| SQL_CA_SS_VARIANT_TYPE | SQL_C_TYPE_DATE | SQL_C_TYPE_BINARY | SQL_C_TYPE_TIMESTAMP | SQL_C_TYPE_TIMESTAMP | SQL_C_TYPE_TIMESTAMP | SQL_C_TYPE_BINARY |
| SQL_CA_SS_VARIANT_SQL_TYPE | SQL类型日期 | SQL_SS_TIME2 | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_SS_TIMESTAMPOFFSET |
| SQL_CA_SS_SERVER_TYPE | 无 | 无 | SQL_SS_TYPE_SMALLDATETIME | SQL_SS_TYPE_DATETIME | SQL_SS_TYPE_DEFAULT | 无 |
有时值范围存在不连续。 例如,8,10..16 中缺少 9。 这是因为当小数精度大于零时添加了小数点。
datetime2作为类型名smalldatetimedatetime返回,因为驱动程序将此作为通用类型,用于将所有SQL_TYPE_TIMESTAMP值传输到服务器。
SQL_CA_SS_VARIANT_SQL_TYPE是一个新的描述符字段。 此字段已添加到 IRD 和 IPD,使应用程序能够指定与 sqlvariant (SQL_SSVARIANT) 列和参数关联的值类型
SQL_CA_SS_SERVER_TYPE是一个新的仅限 IPD 的字段,使应用程序能够控制将参数的值绑定到SQL_TYPE_TYPETIMESTAMP(或作为具有 C 类型SQL_C_TYPE_TIMESTAMP的SQL_SS_VARIANT)发送到服务器的方式。 如果调用 SQLExecute 或 SQLExecDirect 时SQL_DESC_CONCISE_TYPE SQL_TYPE_TIMESTAMP(或SQL_SS_VARIANT且 C 类型为SQL_C_TYPE_TIMESTAMP),则SQL_CA_SS_SERVER_TYPE的值确定参数值的表格数据流 (TDS) 类型,如下所示:
| SQL_CA_SS_SERVER_TYPE值 | SQL_DESC_PRECISION的有效值 | SQL_DESC_LENGTH的有效值 | TDS 类型 |
|---|---|---|---|
| SQL_SS_TYPE_DEFAULT | 0..7 | 19、21..27 | datetime2 |
| SQL_SS_TYPE_SMALLDATETIME | 0 | 19 | smalldatetime |
| SQL_SS_TYPE_DATETIME | 3 | 23 | datetime |
SQL_CA_SS_SERVER_TYPE默认设置为SQL_SS_TYPE_DEFAULT。 使用上表中所述的SQL_CA_SS_SERVER_TYPE设置验证SQL_DESC_PRECISION和SQL_DESC_LENGTH的设置。 如果此验证失败,则返回SQL_ERROR,并记录了 SQLState 07006 和消息“受限数据类型属性冲突”的诊断记录。 如果SQL_CA_SS_SERVER_TYPE设置为非 SQL_SS_TYPE DEFAULT 值且DESC_CONCISE_TYPE未SQL_TYPE_TIMESTAMP,则也会返回此错误。 在描述符一致性验证发生时执行这些验证,例如:
更改SQL_DESC_DATA_PTR时。
在准备或执行时(调用 SQLExecute、SQLExecDirect、SQLSetPos 或 SQLBulkOperations 时)。
当应用程序通过调用禁用延迟准备的 SQLPrepare 或调用 SQLNumResultCols、SQLDescribeCol 或 SQLDescribeParam 来强制进行非延迟准备时,该语句已准备好但未执行。
通过调用 SQLSetDescField 设置SQL_CA_SS_SERVER_TYPE时,其值必须SQL_SS_TYPE_DEFAULT、SQL_SS_TYPE_SMALLDATETIME或SQL_SS_TYPE_DATETIME。 如果不是这种情况,则返回SQL_ERROR,并使用 SQLState HY092 和消息“属性/选项标识符无效”记录诊断记录。
SQL_CA_SS_SERVER_TYPE属性可由依赖于其datetimesmalldatetime支持的功能的应用程序使用,但不能datetime2使用。 例如,datetime2需要使用dateadd和 datediif 函数,同时datetimesmalldatetime允许算术运算符。 大多数应用程序不需要使用此属性,应避免其使用。
IRD 字段中返回的信息
IRD 字段中返回以下信息:
| 列名称 | 日期 | 时间 | smalldatetime | datetime | datetime2 | 日期时间偏移量 |
|---|---|---|---|---|---|---|
| SQL_DESC_AUTO_UNIQUE_VALUE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
| SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
| SQL_DESC_CONCISE_TYPE | SQL类型日期 | SQL_SS_TIME2 | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_SS_TIMESTAMPOFFSET |
| SQL_DESC_DATETIME_INTERVAL_CODE | SQL_CODE_DATE | 0 | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | 0 |
| SQL_DESC_DATETIME_INTERVAL_PRECISION | 10 | 8,10..16 | 16 | 23 | 19、21..27 | 26、28..34 |
| SQL_DESC_DISPLAY_SIZE | 10 | 8,10..16 | 16 | 23 | 19、21..27 | 26、28..34 |
| SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
| SQL_DESC_LENGTH | 10 | 8,10..16 | 16 | 2 | 19、21..27 | 26、28..34 |
| SQL_DESC_LITERAL_PREFIX | “ | “ | “ | “ | “ | “ |
| SQL_DESC_LITERAL_SUFFIX | “ | “ | “ | “ | “ | “ |
| SQL_DESC_LOCAL_TYPE_NAME | date |
time |
smalldatetime |
datetime |
datetime2 |
日期时间偏移量 |
| SQL_DESC_OCTET_LENGTH | 6 | 12 | 4 | 8 | 16 | 20 |
| SQL_DESC_PRECISION | 0 | 0..7 | 0 | 3 | 0..7 | 0..7 |
| SQL_DESC_SCALE | 0 | 0..7 | 0 | 3 | 0..7 | 0..7 |
| SQL_DESC_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE |
| SQL_DESC_TYPE | SQL_DATETIME | SQL_SS_TIME2 | SQL_DATETIME | SQL_DATETIME | SQL_DATETIME | SQL_SS_TIMESTAMPOFFSET |
| SQL_DESC_TYPE_NAME | date |
time |
smalldatetime |
datetime |
datetime2 |
日期时间偏移量 |
| SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE |