日期/時間類型的 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 參數)。 |
SQL_C_SS_TIME2 |
時間 |
SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略 |
SQL_C_SS_TIMESTAMPOFFSET |
datetimeoffset |
SQL_CA_SS_VARIANT_SQL_TYPE 會被忽略 |