共用方式為


參數和結果中繼資料

本主題將描述在日期和時間資料類型之實作參數描述項 (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

smalldatetime (在 IRD 中)、datetime2 (在 IPD 中)

datetime (在 IRD 中)、datetime2 (在 IPD 中)

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 的類型名稱,因為此驅動程式會使用這個類型當做將所有 SQL_TYPE_TIMESTAMP 值傳送至伺服器的一般類型。

SQL_CA_SS_VARIANT_SQL_TYPE 是新的描述項欄位。這個欄位會加入至 IRD 和 IPD,讓應用程式指定與 sqlvariant (SQL_SSVARIANT) 資料行和參數相關聯的數值類型。

SQL_CA_SS_SERVER_TYPE 是新的僅限 IPD 欄位,可讓應用程式控制繫結成 SQL_TYPE_TYPETIMESTAMP (或繫結成具有 SQL_C_TYPE_TIMESTAMP 之 C 類型的 SQL_SS_VARIANT) 的參數值如何傳送至伺服器。如果呼叫 SQLExecuteSQLExecDirect 時 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 設定為 SQL_SS_TYPE DEFAULT 以外的值,而且 DESC_CONCISE_TYPE 不是 SQL_TYPE_TIMESTAMP,系統也會傳回這個錯誤。這些驗證會在發生描述項一致性違規時執行,例如:

  • 當 SQL_DESC_DATA_PTR 已變更時。

  • 在準備或執行階段 (呼叫 SQLExecute、SQLExecDirect、SQLSetPos 或 SQLBulkOperations 時) 中。

  • 當應用程式透過呼叫 SQLPrepare 並停用延遲的準備,或針對已準備但未執行的陳述式呼叫 SQLNumResultColsSQLDescribeColSQLDescribeParam,強制非延遲的準備時。

當 SQL_CA_SS_SERVER_TYPE 是透過呼叫 SQLSetDescField 來設定時,其值必須是 SQL_SS_TYPE_DEFAULT、SQL_SS_TYPE_SMALLDATETIME 或 SQL_SS_TYPE_DATETIME。否則,系統就會傳回 SQL_ERROR 並且使用 SQLState HY092 和訊息「屬性/選項識別碼無效」來記錄診斷記錄。

相依於 datetime 和 smalldatetime 所支援但 datetime2 不支援之功能的應用程式可以使用 SQL_CA_SS_SERVER_TYPE 屬性。例如,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

請參閱

概念