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 資料行的結構描述。 |
透過 SQLColumns 擷取資料表中所有資料行的中繼資料,其資料行搜尋模式為 Null 或 '%' (ODBC) ;或透過沒有資料行限制的DBSCHEMA_COLUMNS架構資料列集, (OLE DB) 。 | 傳回不屬於疏鬆 column_set 成員之所有資料行的資料列。 如果資料表包含疏鬆 column_set ,將會針對該資料表傳回一個資料列。請注意,這不會針對屬於 column_set 成員的資料行傳回中繼資料。 |
不管 column_set 中的疏鬆度或成員資格,擷取所有資料行的中繼資料。 這可能會傳回非常大量的資料列。 |
將描述項欄位SQL_SOPT_SS_NAME_SCOPE設定為 SQL_SS_NAME_SCOPE_EXTENDED,並在 ODBC) (呼叫 SQLColumns 。 針對 DBSCHEMA_COLUMNS_EXTENDED架構資料列集呼叫 IDBSchemaRowset::GetRowset (OLE DB) 。 從 2008 SQL Server 之前的版本中,無法使用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 (OLE DB) 。 從 2008 SQL Server 之前的版本中,無法使用SQL Server Native Client的應用程式。 不過,這類應用程式可以查詢系統檢視。 |
決定資料行是否為疏鬆。 | 請參閱 ODBC) (SQLColumns 結果集SS_IS_SPARSE資料行。 查閱 DBSCHEMA_COLUMNS 結構描述資料列集 (OLE DB) 的 SS_IS_SPARSE 資料行。 從 2008 SQL Server 之前的版本中,無法使用SQL Server Native Client的應用程式。 不過,這類應用程式可以查詢系統檢視。 |
判斷資料行是否為 column_set 。 |
請參閱 SQLColumns 結果集的SS_IS_COLUMN_SET資料行。 或者,SQL Server 請參閱 ODBC) SQL_CA_SS_IS_COLUMN_SET (特定資料行屬性。 查閱 DBSCHEMA_COLUMNS 結構描述資料列集的 SS_IS_COLUMN_SET 資料行。 或者,查閱 IColumnsRowset::GetColumnsRowset 所傳回的資料列集中 IColumnsinfo::GetColumnInfo 或 DBCOLUMNFLAGS 傳回的 dwFlags。 對於 column_set 資料行,將會設定 DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB)。從 2008 SQL Server 之前的版本中,無法使用SQL Server Native Client的應用程式。 不過,這類應用程式可以查詢系統檢視。 |
針對沒有 column_set 的資料表,依 BCP 匯入和匯出疏鬆資料行。 |
舊版SQL Server Native Client的行為沒有變更。 |
針對包含 column_set 的資料表,依 BCP 匯入和匯出疏鬆資料行。 |
會 column_set 以與 XML 相同的方式匯入和匯出 ;也就是說, varbinary(max) 如同系結為二進位類型,或 nvarchar(max) 系結為 char 或 wchar 類型。屬於疏鬆 column_set 成員的資料行不會匯出為不同的資料行;它們只會在 column_set 的值中匯出。 |
BCP 的 queryout 行為。 |
從舊版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
資料行可以當做 XML 資料行存取,以SQL Server 2005 用戶端。
疏鬆資料行的大量複製 (BCP) 支援
在 ODBC 或 OLE DB 中,沒有針對疏鬆資料行或 column_set
功能的 BCP API 變更。
如果某個資料表包含 column_set
,則不會將疏鬆資料行當做不同的資料行處理。 所有疏鬆資料行的值都包含在 的值 column_set
中,其匯出方式與 XML 資料行相同;也就是說, varbinary(max)
如同系結為二進位類型,或 nvarchar(max)
系 char
結為 或 wchar 類型) 。 匯入時,column_set
值必須符合 column_set
的結構描述。
對於 queryout
作業,不會變更處理明確參考之資料行的方式。 column_set
資料行的行為與 XML 資料行相同,而且疏鬆度對於具名疏鬆資料行的處理沒有作用。
不過,如果 queryout
用於匯出,而且您參考的疏鬆資料行屬於依名稱設定之疏鬆資料行集的成員,則您無法直接匯入結構類似的資料表。 這是因為 BCP 會使用與 匯入選取 * 作業一致的中繼資料,而且無法比 column_set
對具有此中繼資料的成員資料行。 若要個別匯入 column_set
成員資料行,您必須在資料表上定義參考所需 column_set
資料行的檢視表,而且您必須使用檢視表執行匯入作業。