中繼資料 - 參數和結果
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)
本主題描述在日期和時間資料類型的實作參數描述元 (IPD) 和實作資料列描述元 (IRD) 欄位中傳回的內容。
IPD 欄位中傳回的資訊
IPD 欄位中會傳回下列資訊:
參數類型 | date | time | smalldatetime | Datetime | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CONCISE_TYPE | SQL_TYPE_DATE | 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_TYPE_DATE | SQL_SS_TYPE_TIME2 | SQL_DATETIME | SQL_DATETIME | SQL_DATETIME | SQL_SS_TIMESTAMPOFFSET |
SQL_DESC_TYPE_NAME | date | time | IRD 中的 Smalldatetime 、 IPD 中的 datetime2 | IRD 中的 datetime 、 IPD 中的 datetime2 | datetime2 | datetimeoffset |
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_TYPE_DATE | SQL_SS_TIME2 | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_SS_TIMESTAMPOFFSET |
SQL_CA_SS_SERVER_TYPE | N/A | N/A | SQL_SS_TYPE_SMALLDATETIME | SQL_SS_TYPE_DATETIME | SQL_SS_TYPE_DEFAULT | N/A |
有時候值範圍有不連續。 例如,8,10..16 中遺漏 9。 這是當小數有效位數大於零時增加的小數點所導致。
datetime2 會當做 Smalldatetime 和 datetime 的 typename 傳回,因為驅動程式會以此作為將所有 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_DESC_PRECISION和SQL_DESC_LENGTH的設定會使用上表中所述的SQL_CA_SS_SERVER_TYPE設定進行驗證。 如果此驗證失敗,則會傳回SQL_ERROR,並使用 SQLState 07006 和訊息「限制資料類型屬性違規」記錄診斷記錄。 如果 SQL_CA_SS_SERVER_TYPE 設為 DEFAULT SQL_SS_TYPE 以外的值,而且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 屬性可供相依于 datetime 和 Smalldatetime 所支援 功能,但不是 datetime2 的應用程式使用。 例如,datetime2 需要使用 dateadd 和 datediif 函式,而 datetime 和 Smalldatetime 也允許算術 運算子。 大部分的應用程式都不需要使用這個屬性,因此應該避免使用。
IRD 欄位中傳回的資訊
IRD 欄位中會傳回下列資訊:
資料行類型 | date | time | smalldatetime | Datetime | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
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_TYPE_DATE | 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 | datetimeoffset |
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 | datetimeoffset |
SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE | SQL_TRUE |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應