次の方法で共有


テーブル値パラメータを含むコマンドの実行

テーブル値パラメータを含むコマンドを実行するには、次の 2 つのフェーズが必要になります。

  1. パラメータの型を指定する。

  2. パラメータ データをバインドする。

テーブル値パラメータの指定

コンシューマは、テーブル値パラメータの型を指定できます。この情報には、テーブル値パラメータの型名が含まれます。また、テーブル値パラメータのユーザー定義テーブル型が接続の現在の既定のスキーマにない場合は、スキーマ名も含まれます。サーバーでサポートされているかどうかに応じて、コンシューマでは、省略可能なメタデータ情報 (列の順序など) を指定したり、特定の列のすべての行に既定値が設定されるよう指定したりすることもできます。

テーブル値パラメータを指定するには、コンシューマで ISSCommandWithParamter::SetParameterInfo を呼び出し、必要に応じて ISSCommandWithParameters::SetParameterProperties も呼び出します。テーブル値パラメータの場合、DBPARAMBINDINFO 構造体の pwszDataSourceType フィールドの値は DBTYPE_TABLE になります。ulParamSize フィールドには ~0 が設定され、長さが不明であることを示します。テーブル値パラメータの特定のプロパティ (スキーマ名、型名、列の順序、既定の列など) は、ISSCommandWithParameters::SetParameterProperties を使用して設定できます。

テーブル値パラメータのバインド

テーブル値パラメータには、任意の行セット オブジェクトを指定できます。プロバイダは、実行中、このオブジェクトからテーブル値パラメータを読み取って、サーバーに送信します。

テーブル値パラメータをバインドするために、コンシューマは 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 が設定された列を想定して、サーバーに送信されます。