SQL_variant日期和時間類型的支援

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

資料行屬性SQL_CA_SS_VARIANT_TYPE用來傳回變異結果資料行的 C 型別。 SQL Server 2008 (10.0.x) 引進了額外的屬性,SQL_CA_SS_VARIANT_SQL_TYPE,這會在實作資料列描述元中設定變數結果資料行的 SQL 類型。 SQL_CA_SS_VARIANT_SQL_TYPE也可以在實作參數描述元 (IPD) 中使用,以指定SQL_SS_TIME2或SQL_SS_TIMESTAMPOFFSET參數的 SQL 類型,該參數具有與類型SQL_SS_VARIANT系結的 C 類型SQL_C_BINARY。

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

針對結果資料行,驅動程式會從 Variant 轉換成日期/時間類型。 如需詳細資訊,請參閱 從 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 類型擷取 Variant 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 time 忽略SQL_CA_SS_VARIANT_SQL_TYPE
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset 忽略SQL_CA_SS_VARIANT_SQL_TYPE

另請參閱

日期和時間改善 (ODBC)