疏鬆資料行支援 (OLE DB)
本主題提供 SQL Server Native Client OLE DB 對於疏鬆資料行支援的相關資訊。 如需有關疏鬆資料行的詳細資訊,請參閱<SQL Server Native Client 中的疏鬆資料行支援>。 如需範例,請參閱<顯示資料行與疏鬆資料行的目錄中繼資料 (OLE DB)>。
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。 |