Share via


執行包含資料表值參數的 SQL Server Native Client 命令

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

  1. 指定參數類型。

  2. 繫結參數資料。

資料表值參數規格

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

若要指定資料表值參數,取用者會呼叫 ISSCommandWithParameter::SetParameterInfo,並選擇性地呼叫 ISSCommandWithParameters::SetParameterProperties。 如果是資料表值參數,DBPARAMBINDINFO 結構中的 pwszDataSourceType 欄位將會有 DBTYPE_TABLE 的值。 ulParamSize 欄位會設定為 ~0,表示長度未知。 資料表值參數的特定屬性 (例如結構描述名稱、類型名稱、資料行順序和預設資料行) 可以透過 ISSCommandWithParameters::SetParameterProperties 設定。

資料表值參數繫結

資料表值參數可以是任何資料列集物件。 提供者會在執行期間將資料表值參數傳送到伺服器的同時,從此物件讀取。

若要繫結資料表值參數,取用者可以呼叫 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 之資料行的資料傳送到伺服器。

另請參閱

資料表值參數 (OLE DB)
使用資料表值參數 (OLE DB)