テーブル値パラメーターの型の検出
コンシューマー、つまり SQL Server Native Client OLE DB プロバイダーを使用するクライアント アプリケーションでは、コマンド テキストが OLE DB プロバイダーに提供されている場合は、各コマンド パラメーターの型を検出できます。 テーブル値パラメーターの型がわかったら、コンシューマーはテーブル値パラメーターの個別の列ごとにメタデータ情報を検出できます。
プロシージャ パラメーターの型情報は、ほとんどのパラメーター型について ICommandWithParameters::GetParameterInfo でサポートされます。 SQL Server 2005 から、ユーザー定義型および xml データ型の導入に伴い、ICommandWithParameters によりユーザー定義型の情報 (名前、スキーマ、およびカタログ) を提供することができなくなったため、GetParameterInfo メソッドは十分に目的を果たしていませんでした。 拡張された型情報を提供するために、新しいインターフェイス ISSCommandWithParameters が定義されました。
テーブル値パラメーターでは、詳細情報を検出するために ISSCommandWithParameters インターフェイスも使用します。 クライアントは、コマンド オブジェクトを準備した後に ISSCommandWithParameters::GetParameterInfo を呼び出します。 テーブル値パラメーターでは、DBPARAMINFO 構造体の wType メンバーが、プロバイダーによって DBTYPE_TABLE に設定されます。 DBPARAMINFO 構造体の ulParamSize フィールドの値は ~0 です。
コンシューマーは、次に ISSCommandWithParamters::GetParameterProperties を使用して、追加のプロパティ (テーブル値パラメーターの型のカタログ名、テーブル値パラメーターの型のスキーマ名、テーブル値パラメーターの型名、列の順序、および既定の列) を要求します。
型名がわかったら、コンシューマーは個々の列情報を取得するために、IOpenRowset::OpenRowset を呼び出すか、テーブル値パラメーターの型名をテーブル名として指定して、DBSCHEMA_TABLE_TYPE_COLUMNS 行セットを取得する必要があります。