テーブル値パラメータの型の検出

コンシューマ、つまり 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 行セットを取得する必要があります。