共用方式為


疏鬆資料行支援 (OLE DB)

本主題提供 SQL Server Native Client OLE DB 對於疏鬆資料行支援的相關資訊。如需有關疏鬆資料行的詳細資訊,請參閱<SQL Server Native Client 中的疏鬆資料行支援>。

OLE DB 陳述式中繼資料

從 SQL Server 2008 開始,提供新的 DBCOLUMNFLAGS 旗標值 DBCOLUMNFLAGS_SS_ISCOLUMNSET。此值應該針對 column_set 值的資料行設定。DBCOLUMNFLAGS 旗標可以透過 IColumnsInfo::GetColumnsInfo 的 dwFlags 參數擷取,而且資料列集的 DBCOLUMN_FLAGS 資料行會由 IColumnsRowset::GetColumnsRowset 傳回。

OLE DB 目錄中繼資料

系統已經將兩個額外的 SQL Server 專用資料行加入到 DBSCHEMA_COLUMNS 中。

資料行名稱

資料類型

值/註解

SS_IS_SPARSE

DBTYPE_BOOL

如果資料行為疏鬆資料行,這個值為 VARIANT_TRUE,否則為 VARIANT_FALSE。

SS_IS_COLUMN_SET

DBTYPE_BOOL

如果資料行為疏鬆 column_set 資料行,這個值為 VARIANT_TRUE,否則為 VARIANT_FALSE。

系統也已經加入兩個額外的結構描述資料列集。這些資料列集與 DBSCHEMA_COLUMNS 的結構相同,但傳回不同的內容。DBSCHEMA_COLUMNS_EXTENDED 會傳回所有資料行而不管 column_set 成員資格為何。DBSCHEMA_SPARSE_COLUMN_SET 僅會傳回屬於疏鬆 column_set 成員的資料行。

OLE DB DataTypeCompatibility 行為

DataTypeCompatibility=80 的行為 (在連接字串中) 與 SQL Server 2000 用戶端一致,如下所示:

  • 您看不到新的結構描述資料列集,而且在結構描述資料列集中沒有它們的資料列。

  • 您看不到 COLUMNS 資料列集中的新資料行。

  • column_set 資料行不會設定 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

  • column_set 資料行會設定 DBCOMPUTEMODE_NOTCOMPUTED。

疏鬆資料行的 OLE DB 支援

下列 OLE DB 介面會在 SQL Server Native Client 中修改以支援疏鬆資料行:

類型或成員函數

描述

IColumnsInfo::GetColumnsInfo

在 dwFlags 中,系統會設定 column_set 資料行的新 DBCOLUMNFLAGS 旗標值 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

column_set 資料行會設定 DBCOLUMNFLAGS_WRITE。

IColumsRowset::GetColumnsRowset

在 DBCOLUMN_FLAGS 中,系統會設定 column_set 資料行的新 DBCOLUMNFLAGS 旗標值 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

DBCOLUMN_COMPUTEMODE 會針對 column_set 資料行,設定為 DBCOMPUTEMODE_DYNAMIC。

IDBSchemaRowset::GetSchemaRowset

DBSCHEMA_COLUMNS 會傳回兩個新的資料行:SS_IS_COLUMN_SET 和 SS_IS_SPARSE。

DBSCHEMA_COLUMNS 僅會傳回不屬於疏鬆 column_set 成員的資料行。

系統已加入兩個新的結構描述資料列集:DBSCHEMA_COLUMNS_EXTENDED 將會傳回所有資料行,而不管 column_set 成員資格的疏鬆度。DBSCHEMA_SPARSE_COLUMN_SET 僅會傳回屬於 column_set 成員的資料行。這些新的資料列集與 DBSCHEMA_COLUMNS 的資料行和限制相同。

IDBSchemaRowset::GetSchemas

IDBSchemaRowset::GetSchemas 在可用結構描述資料列集的清單中,包含用於新資料列集 DBSCHEMA_COLUMNS_EXTENDED 和 DBSCHEMA_SPARSE_COLUMN_SET 的 GUID。

ICommand::Execute

如果使用 select * from table,它會傳回不屬於疏鬆 column_set 成員的所有資料行,加上包含屬於疏鬆 column_set 成員之所有非 Null 資料行值的 XML 資料行 (如果有的話)。

IOpenRowset::OpenRowset

IOpenRowset::OpenRowset 傳回的資料列集包含與 ICommand::Execute 相同的資料行,而且在相同的資料表上有 select * 查詢。

ITableDefinition

對於疏鬆資料行或 column_set 資料行的這個介面,則沒有任何變更。需要修改結構描述的應用程式必須直接執行適當的 Transact-SQL。