日期/時間類型的 sql_variant 支援

本主題描述 sql_variant 資料類型如何支援強化的日期和時間功能。

資料行屬性 SQL_CA_SS_VARIANT_TYPE 是用來傳回變數結果資料行的 C 類型。SQL Server 2008 導入了一個額外的屬性 SQL_CA_SS_VARIANT_SQL_TYPE,可在實作資料列描述項 (IRD) 中設定變數結果資料行的 SQL 類型。SQL_CA_SS_VARIANT_SQL_TYPE 也可以在實作參數描述項 (IPD) 中用來指定讓 SQL_C_BINARY C 類型與 SQL_SS_VARIANT 類型繫結之 SQL type of a SQL_SS_TIME2 或 SQL_SS_TIMESTAMPOFFSET 參數的 SQL 類型。

SQLColAttribute 可以設定 SQL_SS_TIME2 和 SQL_SS_TIMESTAMPOFFSET 這些新類型。SQLGetDescField 可以傳回 SQL_CA_SS_VARIANT_SQL_TYPE。

若為結果資料行,驅動程式會從變數轉換成日期/時間類型。如需詳細資訊,請參閱<從 SQL 轉換成 C>。繫結至 SQL_C_BINARY 時,緩衝區長度必須夠大,足以接收對應至 SQL 類型的結構。

若為 SQL_SS_TIME2 和 SQL_SS_TIMESTAMPOFFSET 參數,驅動程式會將 C 值轉換成 sql_variant 值,如下表所述。如果某個參數繫結成 SQL_C_BINARY 而且伺服器類型為 SQL_SS_VARIANT,除非應用程式已經將 SQL_CA_SS_VARIANT_SQL_TYPE 設定為其他 SQL 類型,否則它就會被視為二進位值。在此情況下,系統會優先使用 SQL_CA_SS_VARIANT_SQL_TYPE。也就是說,如果已設定 SQL_CA_SS_VARIANT_SQL_TYPE,它就會覆寫從 C 類型推算出變數 SQL 類型的預設行為。

C 類型

伺服器類型

註解

SQL_C_CHAR

varchar

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_WCHAR

nvarcar

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_TINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_STINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_SHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_SSHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_USHORT

int

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_LONG

int

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_SLONG

int

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_ULONG

bigint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_SBIGINT

bigint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_FLOAT

real

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_DOUBLE

float

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_BIT

bit

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_UTINYINT

tinyint

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_BINARY

varbinary

不會設定 SQL_CA_SS_VARIANT_SQL_TYPE。

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

小數位數設定為 SQL_DESC_PRECISION (SQLBindParameter 的 DecimalDigits 參數)。

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

小數位數設定為 SQL_DESC_PRECISION (SQLBindParameter 的 DecimalDigits 參數)。

SQL_C_TYPE_DATE

date

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_TYPE_TIME

time(0)

SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略。

SQL_C_TYPE_TIMESTAMP

datetime2

小數位數設定為 SQL_DESC_PRECISION (SQLBindParameter 的 DecimalDigits 參數)。

SQL_C_NUMERIC

decimal

有效位數設定為 SQL_DESC_PRECISION (SQLBindParameter 的 ColumnSize 參數)。

小數位數設定為 SQL_DESC_SCALE (SQLBindParameter 的 DecimalDigits 參數)。