共用方式為


Table-Valued 參數數據列集建立

雖然取用者可以為數據表值參數提供任何數據列集物件,但一般數據列集物件會針對後端數據存放區實作,因此提供有限的效能。 基於這個理由,SQL Server Native Client OLE DB 提供者可讓取用者在記憶體內部數據上建立特製化數據列集物件。 這個特殊的記憶體內部數據列集對像是稱為數據表值參數數據列集 的新 COM 物件。 它提供與參數集類似的功能。

數據表值參數數據列集物件是由取用者透過多個會話層級介面明確建立的輸入參數。 每個數據表值參數的數據列集物件都有一個實例。 取用者可以藉由提供已知元數據資訊(靜態案例),或透過提供者介面(動態案例)來探索數據表值參數數據列集物件。 下列各節將說明這兩個案例。

靜態案例

當類型資訊已知時,取用者會使用ITableDefinitionWithConstraints::CreateTableWithConstraints 來具現化對應至數據表值參數的數據表值參數數據列集物件。

guid 字段 (pTableID 參數) 包含特殊的 GUID (CLSID_ROWSET_TVP)。 pwszName 成員包含取用者想要具現化之數據表值參數類型的名稱。 eKind 欄位將會設定為 [DBKIND_GUID_NAME]。 當語句是臨機作 SQL 時,需要此名稱;如果名稱是過程調用,則為選擇性名稱。

針對匯總,取用者會使用控制 IUnknown 傳遞 pUnkOuter 參數。

數據表值參數數據列集物件屬性是只讀的,因此取用者不會預期在 rgPropertySets 中設定任何屬性。

針對每個 DBCOLUMNDESC 結構的 rgPropertySets 成員,取用者可以為每個數據行指定其他屬性。 這些屬性屬於DBPROPSET_SQLSERVERCOLUMN屬性集。 它們可讓您指定每個資料行的計算和預設設定。 它們也支援現有的數據行屬性,例如可為 Null 和身分識別。

若要從數據表值參數數據列集物件擷取對應的資訊,取用者會使用 IRowsetInfo::GetProperties。

若要擷取每個數據行之 Null、唯一、計算和更新狀態的相關信息,取用者會使用 IColumnsRowset::GetColumnsRowset 或 IColumnsInfo::GetColumnInfo。 這些方法會提供有關每個數據表值參數數據列集數據行的詳細資訊。

取用者會指定數據表值參數的每個數據行類型。 這類似於在 SQL Server 中建立數據表時指定數據行的方式。 取用者會透過 ppRowset 輸出參數,從 SQL Server Native Client OLE DB 提供者取得資料表值參數數據列集物件。

動態案例

當取用者沒有類型資訊時,它應該使用 IOpenRowset::OpenRowset 來具現化數據表值參數數據列集物件。 所有取用者必須提供給提供者是類型名稱。

在此案例中,提供者會代表取用者,從伺服器取得數據表值參數數據列集物件的類型資訊。

pTableIDpUnkOuter 參數應該在靜態案例中設定為 。 SQL Server Native Client OLE DB 提供者接著會從伺服器取得類型資訊(資料行資訊和條件約束),並透過 ppRowset 參數傳回資料表值參數數據列集物件。 此作業需要與伺服器通訊,因此不會執行靜態案例。 動態案例僅適用於參數化過程調用。

另請參閱

Table-Valued 參數 (OLE DB)
使用 Table-Valued 參數 (OLE DB)