在 SQL Server Native Client 中建立數據表值參數數據列集
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
雖然取用者可以提供資料表值參數的任何資料列集物件,但是一般的資料列集物件都會針對後端資料存放區來實作,因此所提供的效能會受到限制。 基於這個理由,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 來具現化數據表值參數數據列集物件。 取用者只需要提供類型名稱給提供者。
在此案例中,提供者會代表取用者包含來自伺服器之資料表值參數資料列集物件的相關類型資訊。
pTableID 和 pUnkOuter 參數的設定應該與靜態案例相同。 SQL Server Native Client OLE DB 提供者接著會從伺服器取得類型資訊(資料行資訊和條件約束),並透過 ppRowset 參數傳回資料表值參數數據列集 物件。 此作業需要與伺服器通訊,因此不會執行靜態案例。 動態案例只適用於參數化程序呼叫。