次の方法で共有


コマンド パラメーター

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB ドライバーのダウンロード

コマンド テキスト内のパラメーターは、疑問符文字でマークされます。 たとえば、次の SQL ステートメントでは 1 つの入力パラメーターがマークされています。

{call SalesByCategory('Produce', ?)}  

ネットワーク トラフィックを削減してパフォーマンスを向上するために、OLE DB Driver for SQL Server では、コマンドの実行前に ICommandWithParameters::GetParameterInfo または ICommandPrepare::Prepare が呼び出されない限り、パラメーター情報の自動抽出は行いません。 つまり、OLE DB Driver for SQL Server では次のことは自動で行われません。

  • ICommandWithParameters::SetParameterInfo で指定されたデータ型の正当性を確認すること。

  • アクセサー バインド情報で指定された DBTYPE から、そのパラメーターに対する適切な SQL Server データ型にマップすること。

アプリケーションで SQL Server データ型のパラメーターと互換性のないデータ型を指定すると、上記のいずれかが原因で、エラーが発生したり、有効桁数が失われる可能性があります。

このようなことが起きないようにするには、アプリケーションで次の条件を満たす必要があります。

  • ICommandWithParameters::SetParameterInfo をハードコーディングしている場合、pwszDataSourceType をパラメーターの SQL Server データ型と一致させます。

  • アクセサーをハードコーディングしている場合、パラメーターにバインドされている DBTYPE 値の型を、パラメーターの SQL Server データ型と同じにします。

  • ICommandWithParameters::GetParameterInfo を呼び出すようにアプリケーションをコーディングし、プロバイダーでパラメーターの SQL Server データ型を動的に取得できるようにします。 これにより、ネットワーク上でサーバーとの余分なやり取りが増えることに注意してください。

Note

SQL Native Client OLE DB プロバイダーでは、FROM 句が含まれている SQL Server UPDATE ステートメントや DELETE ステートメント、パラメーターを含むサブクエリに依存する SQL ステートメント、比較の両方の式、LIKE 述部、および定量化された述語内にパラメーター マーカーを含む SQL ステートメント、またはパラメーターのいずれかが、関数に対するパラメーターになっているクエリの場合は、ICommandWithParameters::GetParameterInfo を呼び出すことはできません。 また、SQL ステートメントをバッチ処理する場合、バッチ内の最初のステートメントの後にあるステートメント内のパラメーター マーカーに対して、ICommandWithParameters::GetParameterInfo を呼び出すことはできません。 Transact-SQL コマンド内ではコメント (/* */) を使用できません。

OLE DB Driver for SQL Server では、SQL ステートメント コマンドで入力パラメーターを使用できます。 OLE DB Driver for SQL Server では、プロシージャ呼び出しコマンドで入力パラメーター、出力パラメーター、入出力パラメーターを使用できます。 出力パラメーターの値は、実行時 (行セットが返されない場合のみ)、または返されたすべての行セットがアプリケーションによって使用されたときにアプリケーションに返されます。 返される値が有効であることを保証するには、IMultipleResults を使用して行セットを強制的に使用します。

ストアド プロシージャ パラメーターの名前を DBPARAMBINDINFO 構造体で指定する必要はありません。 OLE DB Driver for SQL Server でパラメーター名を無視し、ICommandWithParameters::SetParameterInforgParamOrdinals メンバーで指定された序数だけを使用する必要があることを示すには、pwszName メンバーの値に NULL を使用します。 コマンド テキストに名前付きのパラメーターと名前のないパラメーターの両方が含まれている場合、どの名前付きパラメーターよりも前に、名前のないパラメーターをすべて指定する必要があります。

ストアド プロシージャ パラメーターの名前が指定された場合、OLE DB Driver for SQL Server ではその名前が妥当かどうかがチェックされます。 OLE DB Driver for SQL Server でコンシューマーから不適切なパラメーター名を受け取ると、エラーが返されます。

Note

OLE DB Driver for SQL Server には SQL Server XML と UDT (ユーザー定義型) のサポートを公開するために、新しい ISSCommandWithParameters インターフェイスが実装されています。

参照

コマンド