sql_variant日期和時間類型的支援
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics 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 |
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: