テーブル値パラメーターを含むコマンドを実行するには、次の 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 以外であり、 pObject のiid メンバーは、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 に設定されている場合、テーブル値パラメーターの値は空のテーブルに対応します。
テーブル値パラメーター (ID または計算列) の読み取り専用列は、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)