SQL Server Native Client 中的疏鬆資料行支援 (OLE DB)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client OLE DB 提供者 (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的開發。 請切換至新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 以繼續使用。

本主題提供疏鬆資料行之 SQL Server Native Client OLE DB 支援的相關資訊。 如需疏鬆資料行的詳細資訊,請參閱 SQL Server Native Client 中的疏鬆資料行支援。 如需範例,請參閱顯示資料行與疏鬆資料行的目錄中繼資料 (OLE DB)

OLE DB 陳述式中繼資料

從 SQL Server 2008 (10.0.x) 開始,提供新的 DBCOLUMNFLAGS 旗標值 DBCOLUMNFLAGS_SS_ISCOLUMNSET。 此值應該針對 column_set 值的資料行設定。 您可以透過 IColumnsInfo::GetColumnsInfo 的 dwFlags 參數和 IColumnsRowset::GetColumnsRowset 所傳回之資料列集的 DBCOLUMN_FLAGS 資料行,來擷取 DBCOLUMNFLAGS 旗標。

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 (8.x) 用戶端一致,如下所示:

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

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

  • column_set 資料行不會設定 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

  • column_set 資料行會設定 DBCOMPUTEMODE_NOTCOMPUTED。

疏鬆資料行的 OLE DB 支援

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

類型或成員函數 描述
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 * fromtable,它會傳回不屬於疏鬆 column_set 成員的所有資料行,加上包含屬於疏鬆 column_set 成員之所有非 Null 資料行值的 XML 資料行 (如果有的話)。
IOpenRowset::OpenRowset IOpenRowset::OpenRowset 會在相同資料表上使用 select * 查詢,傳回具有與 ICommand::Execute 相同資料行的資料列集。
ITableDefinition 對於疏鬆資料行或 column_set 資料行的這個介面,則沒有任何變更。 需要修改結構描述的應用程式必須直接執行適當的 Transact-SQL。

另請參閱

SQL Server Native Client (OLE DB)