中繼資料 - 參數和結果

適用於: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

另請參閱

中繼資料 (ODBC)