次の方法で共有


SQL Server Native Client コマンド パラメーター

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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

{call SalesByCategory('Produce', ?)}  

ネットワーク トラフィックを減らすことでパフォーマンスを向上させるために、SQL Server Native Client OLE DB プロバイダーは、コマンドを実行する前に ICommandWithParameters::GetParameterInfo または ICommandPrepare::P repare を呼び出さない限り、パラメーター情報を自動的に派生させません。 つまり、SQL Server Native Client OLE DB プロバイダーは自動的には実行されません。

  • 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 コマンド内ではコメント (/* */) を使用できません。

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

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

ストアド プロシージャ パラメーターの名前が指定されている場合、SQL Server Native Client OLE DB プロバイダーは、その名前が有効であることを確認します。 SQL Server Native Client OLE DB プロバイダーは、コンシューマーから誤ったパラメーター名を受け取るとエラーを返します。

Note

SQL Server XML およびユーザー定義型 (UDT) のサポートを公開するために、SQL Server Native Client OLE DB プロバイダーは新しい ISSCommandWithParameters インターフェイスを実装します。

参照

コマンド