元數據 - 參數和結果
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics 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,並使用State 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 |