數據列集和參數中的 SQL Server Native Client 資料類型對應
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)
在數據列集和參數值中,SQL Server Native Client OLE DB 提供者會使用下列 OLE DB 定義的數據類型,在 IColumnsInfo::GetColumnInfo 和 ICommandWithParameters::GetParameterInfo 函數中報告 SQL Server 數據。
SQL Server 資料類型 | OLE DB 資料類型 |
---|---|
bigint | DBTYPE_I8 |
binary | DBTYPE_BYTES |
bit | DBTYPE_BOOL |
char | DBTYPE_STR |
datetime | DBTYPE_DBTIMESTAMP |
datetime2 | DBTYPE_DBTIME2 |
decimal | DBTYPE_NUMERIC |
float | DBTYPE_R8 |
image | DBTYPE_BYTES |
int | DBTYPE_I4 |
money | DBTYPE_CY |
nchar | DBTYPE_WSTR |
ntext | DBTYPE_WSTR |
numeric | DBTYPE_NUMERIC |
nvarchar | DBTYPE_WSTR |
real | DBTYPE_R4 |
smalldatetime | DBTYPE_DBTIMESTAMP |
smallint | DBTYPE_I2 |
smallmoney | DBTYPE_CY |
sql_variant | DBTYPE_VARIANT、DBTYPE_SQLVARIANT |
sysname | DBTYPE_WSTR |
text | DBTYPE_STR |
timestamp | DBTYPE_BYTES |
tinyint | DBTYPE_UI1 |
UDT | DBTYPE_UDT |
uniqueidentifier | DBTYPE_GUID |
varbinary | DBTYPE_BYTES |
varchar | DBTYPE_STR |
XML | DBTYPE_XML |
SQL Server Native Client OLE DB 提供者支持取用者要求的數據轉換,如下圖所示。
sql_variant 物件可保存任何 SQL Server 資料類型的資料,除了text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp 和 Microsoft .NET Framework Common Language Runtime (CLR) 使用者定義型別。 sql_variant 資料的執行個體不能用 sql_variant 做為它的基礎基底資料類型。 例如,資料行可以在某些資料列中包含 smallint 值,在其他資料列中包含 float 值,而在剩餘的資料列中包含 char/nchar 值。
注意
sql_variant數據類型類似於 Visual Basic 中的 Variant 數據類型,以及 OLEDB 中DBTYPE_SQLVARIANT DBTYPE_VARIANT。
以 DBTYPE_VARIANT 擷取 sql_variant 資料時,會將該資料置於緩衝區的 VARIANT 結構中。 但是 VARIANT 結構中的子類型可能不會對應到定義於 sql_variant 資料類型中的子類型。 接下來必須以 DBTYPE_SQLVARIANT 擷取 sql_variant 資料,才能讓所有的子類型相互對應。
DBTYPE_SQLVARIANT 資料類型
為了支援 sql_variant 數據類型,SQL Server Native Client OLE DB 提供者會公開稱為 DBTYPE_SQLVARIANT 的提供者特定數據類型。 以 DBTYPE_SQLVARIANT 擷取 sql_variant 資料時,該資料會儲存在提供者特定的 SSVARIANT 結構中。 SSVARIANT 結構包含的所有子類型都符合 sql_variant 資料類型的子類型。
工作階段屬性 SSPROP_ALLOWNATIVEVARIANT 也必須設定為 TRUE。
提供者特定的屬性 SSPROP_ALLOWNATIVEVARIANT
您在提取資料時,可以明確地指定要針對資料行或參數傳回何種資料類型。 IColumnsInfo 也可以用來取得資料行資訊,並用該資訊來進行繫結。 使用 IColumnsInfo 來取得用於繫結用途的資料行資訊時,如果 SSPROP_ALLOWNATIVEVARIANT 工作階段屬性為 FALSE (預設值),則會針對 sql_variant 資料行傳回 DBTYPE_VARIANT。 如果 SSPROP_ALLOWNATIVEVARIANT 屬性為 FALSE,則 DBTYPE_SQLVARIANT 不受支援。 如果 SSPROP_ALLOWNATIVEVARIANT 屬性設定為 TRUE,則資料行類型會傳回為 DBTYPE_SQLVARIANT,在此種情況下,緩衝區會保存 SSVARIANT 結構。 以 DBTYPE_SQLVARIANT 擷取 sql_variant 資料時,工作階段屬性 SSPROP_ALLOWNATIVEVARIANT 必須設定為 TRUE。
SSPROP_ALLOWNATIVEVARIANT 屬性是提供者特定之 DBPROPSET_SQLSERVERSESSION 屬性集的一部分,而且是工作階段屬性。
DBTYPE_VARIANT 適用於所有其他的 OLE DB 提供者。
SSPROP_ALLOWNATIVEVARIANT
SSPROP_ALLOWNATIVEVARIANT 是工作階段屬性,屬於 DBPROPSET_SQLSERVERSESSION 屬性集。
屬性識別碼 | 描述 |
---|---|
SSPROP_ALLOWNATIVEVARIANT | 輸入:VT_BOOL R/W:讀取/寫入 預設值:VARIANT_FALSE 描述:決定所提取的資料是否為 DBTYPE_VARIANT 或 DBTYPE_SQLVARIANT。 VARIANT_TRUE:資料行類型是以 DBTYPE_SQLVARIANT 傳回,在此種情況下,緩衝區會保存 SSVARIANT 結構。 VARIANT_FALSE:資料行類型會以 DBTYPE_VARIANT 傳回,而且緩衝區將具有 VARIANT 結構。 |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應