數據列集和參數中的 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 結構。

另請參閱

資料類型 (OLE DB)