共用方式為


執行包含 Table-Valued 參數的命令

執行包含資料表值參數的命令需要兩個階段:

  1. 指定參數類型。

  2. 係結參數數據。

Table-Valued 參數規格

取用者可以指定數據表值參數的類型。 此資訊包含數據表值參數類型名稱。 如果數據表值參數的使用者定義數據表類型不在連接的目前預設架構中,它也會包含架構名稱。 根據伺服器支援,取用者也可以指定選擇性元數據資訊,例如數據行的排序,也可以指定特定數據行的所有數據列都有預設值。

若要指定數據表值參數,取用者會呼叫 ISSCommandWithParameter::SetParameterInfo,並選擇性地呼叫 ISSCommandWithParameters::SetParameterProperties。 對於數據表值參數,DBPARAMBINDINFO 結構中的 pwszDataSourceType 字段具有 DBTYPE_TABLE 的值。 ulParamSize 字段設定為 ~0,表示長度未知。 數據表值參數的特定屬性,例如架構名稱、類型名稱、數據行順序和預設數據行,可以透過ISSCommandWithParameters::SetParameterProperties 來設定。

Table-Valued 參數係結

數據表值參數可以是任何數據列集物件。 提供者會在執行期間將數據表值參數傳送至伺服器時,從這個物件讀取。

若要系結數據表值參數,取用者會呼叫 IAccessor::CreateAccessor。 數據表值參數之 DBBINDING 結構的 wType 字段會設定為 DBTYPE_TABLE。 DBBINDING 結構的 pObject 成員不是 NULL,而 pObjectiid 成員會設定為 IID_IRowset 或任何其他數據表值參數數據列集物件介面。 DBBINDING 結構中的其餘字段應該以針對串流 BLOB 所設定的相同方式進行設定。

在數據表值參數和與數據表值參數相關聯的數據列集物件系結中,適用下列限制:

  • 數據表值參數數據列集數據行數據的唯一允許狀態值是DBSTATUS_S_ISNULL和DBSTATUS_S_OK。 DBSTATUS_S_DEFAULT會導致失敗,且系結狀態值會設定為 DBSTATUS_E_BADSTATUS。

  • 數據表值參數可以標示為狀態DBSTATUS_S_DEFAULT。 唯一有效的值是DBSTATUS_S_DEFAULT和DBSTATUS_S_OK。 當狀態設定為 DBSTATUS_S_DEFAULT 時,數據表值參數的值會對應至空的數據表。

  • 數據表值參數中的唯讀資料行(識別或計算數據行)必須使用 SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 屬性標示為預設。 具有預設值的數據行也必須透過 SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 屬性標示為預設值,才能將預設值用於特定數據表值參數的數據行數據值。 提供者會忽略標示為預設值的數據行所系結的數據值。

  • 除非同時設定SSPROP_PARAM_TABLE_DEFAULT,否則數據會傳送至伺服器,以取得具有DBPROP_COL_AUTOINCREMENT或SSPROP_COL_COMPUTED的數據行。

另請參閱

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