共用方式為


SQL Server Native Client 中的疏鬆數據行支援

SQL Server Native Client 支援疏鬆數據行。 如需有關 SQL Server 中疏鬆資料行的詳細資訊,請參閱使用疏鬆資料行使用資料行集

如需 SQL Server Native Client 中疏鬆資料行支援的詳細資訊,請參閱 疏鬆數據行支援 (ODBC)疏鬆數據行支援 (OLE DB)

如需示範這項功能之範例應用程式的相關信息,請參閱 SQL Server 數據程式設計範例

疏鬆數據行和 SQL Server Native Client 的使用者案例

下表摘要說明 SQL Server Native Client 使用者具有疏鬆數據行的常見使用者案例:

情境 行為
select * from table 或 IOpenRowset::OpenRowset. 傳回不是疏鬆 column_set成員的所有數據行,加上包含屬於疏 column_set鬆之所有非 Null 數據行值的 XML 資料行。
依名稱參考資料行。 不論其疏鬆數據行狀態或 column_set 成員資格為何,都可以參考數據行。
透過計算的 XML 資料行存取 column_set 成員數據行。 疏鬆 column_set 成員的數據行可以藉由選取 column_set 名稱來存取,而且可以藉由更新數據行中的 column_set XML 來插入和更新值。

值必須符合數據行的 column_set 架構。
透過具有 NULL 或 '%' 的資料行搜尋模式,透過 SQLColumns 擷取資料表中所有資料行的元數據:或透過沒有數據行限制的DBSCHEMA_COLUMNS架構數據列集 (OLE DB)。 針對不是 column_set成員的所有數據行,傳回數據列。 如果數據表有疏鬆 column_set,則會傳回一個數據列。

請注意,這不會傳回屬於 之數據行的 column_set元數據。
擷取所有數據行的元數據,不論 中 column_set疏鬆或成員資格為何。 這可能會傳回非常大量的資料列。 將描述元欄位SQL_SOPT_SS_NAME_SCOPE設定為SQL_SS_NAME_SCOPE_EXTENDED並呼叫 SQLColumns (ODBC)。

針對DBSCHEMA_COLUMNS_EXTENDED架構數據列集 (OLE DB) 呼叫IDBSchemaRowset::GetRowset。

此案例無法從比 SQL Server 2008 之前的版本使用 SQL Server Native Client 的應用程式。 不過,這類應用程式可以直接查詢系統檢視。
只擷取屬於成員之數據行的 column_set元數據。 這可能會傳回非常大量的資料列。 將描述元欄位SQL_SOPT_SS_NAME_SCOPE設定為SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET並呼叫 SQLColumns (ODBC)。

針對DBSCHEMA_SPARSE_COLUMN_SET架構數據列集呼叫IDBSchemaRowset::GetRowset。

此案例無法從比 SQL Server 2008 之前的版本使用 SQL Server Native Client 的應用程式。 不過,這類應用程式可以查詢系統檢視。
決定資料行是否為疏鬆。 請參閱 SQLColumns 結果集 (ODBC) 的SS_IS_SPARSE數據行。

查閱 DBSCHEMA_COLUMNS 結構描述資料列集 (OLE DB) 的 SS_IS_SPARSE 資料行。

此案例無法從比 SQL Server 2008 之前的版本使用 SQL Server Native Client 的應用程式。 不過,這類應用程式可以查詢系統檢視。
判斷資料列是否為 column_set 請參閱 SQLColumns 結果集SS_IS_COLUMN_SET數據行。 或者,請參閱 SQL Server 特定數據行屬性SQL_CA_SS_IS_COLUMN_SET (ODBC)。

查閱 DBSCHEMA_COLUMNS 結構描述資料列集的 SS_IS_COLUMN_SET 資料行。 或者,查閱 IColumnsRowset::GetColumnsRowset 所傳回的資料列集中 IColumnsinfo::GetColumnInfo 或 DBCOLUMNFLAGS 傳回的 dwFlags。 針對 column_set 數據行,將會設定DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB)。

此案例無法從比 SQL Server 2008 之前的版本使用 SQL Server Native Client 的應用程式。 不過,這類應用程式可以查詢系統檢視。
針對不含 column_set的數據表,由BCP匯入和導出疏鬆數據行。 舊版 SQL Server Native Client 的行為沒有變更。
針對具有 column_set的數據表,由BCP匯入和導出疏鬆數據行。 column_set 以與 XML 相同的方式匯入和導出 ;也就是說, varbinary(max) 如同系結為二進位類型,或 nvarchar(max) 如同系結為 charwchar 類型。

疏鬆 column_set 成員的數據行不會匯出為相異數據行;它們只會匯出在 的值 column_set中。
queryout BCP 的行為。 從舊版 SQL Server Native Client 處理明確命名的數據行時,不會有任何變更。

與包含不同結構描述之資料表間匯入和匯出相關的案例可能需要特殊處理。

如需有關 BCP 的詳細資訊,請參閱本主題稍後的「疏鬆資料行的大量複製 (BCP) 支援」。

下層用戶端行為

下層用戶端只會針對非 SQLColumns 和 DBSCHMA_COLUMNS 疏鬆成員的數據 column_set 行傳回元數據。 SQL Server 2008 Native Client 中導入的其他 OLE DB 架構數據列集將無法使用,也不會透過 SQL_SOPT_SS_NAME_SCOPE 修改 ODBC 中的 SQLColumns。

下層用戶端可以依名稱存取屬於疏鬆 column_set 成員的數據行,而且 column_set 數據行將可做為 SQL Server 2005 用戶端的 XML 數據行存取。

疏鬆資料行的大量複製 (BCP) 支援

針對疏鬆數據行或 column_set 功能,ODBC 或 OLE DB 中沒有任何 BCP API 的變更。

如果數據表有 column_set,疏鬆數據行就不會當做相異數據行來處理。 所有疏鬆數據行的值都包含在 的值 column_set中,其匯出方式與 XML 數據行相同;也就是說, varbinary(max) 如同系結為二進位類型,或 nvarchar(max) 如同系結為 charwchar 類型)。 匯入時, column_set 值必須符合的 column_set架構。

針對 queryout 作業,不會變更明確參考數據行的處理方式。 column_set 數據行的行為與 XML 數據行相同,疏鬆對具名疏鬆數據行的處理沒有影響。

不過,如果使用 queryout 匯出,而且參考疏鬆數據行是依名稱設定之疏鬆數據行成員的數據行,則無法執行直接匯入至類似結構化的數據表。 這是因為 BCP 使用的元數據與匯入的 選取 * 作業一致,而且無法比 column_set 對成員數據行與這個元數據。 若要個別匯 column_set 入成員數據行,您必須在參考所需 column_set 數據行的數據表上定義檢視,而且必須使用檢視來執行匯入作業。

另請參閱

SQL Server Native Client 程式設計