ステートメント パラメーターの使用 - パラメーターのバインド

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL ステートメントの各パラメーター マーカーは、ステートメントを実行する前にアプリケーション内の変数に関連付ける、つまりバインドする必要があります。 これを行うには、 SQLBindParameter 関数を呼び出します。 SQLBindParameter は、プログラム変数 (アドレス、C データ型など) をドライバーに記述します。 また、序数値を示すことでパラメーター マーカーを識別してから、そのパラメーター マーカーが表す SQL オブジェクト表現 (SQL データ型、有効桁数など) を記述します。

パラメーター マーカーは、ステートメントの実行前にいつでもバインドまたは再バインドできます。 次のいずれかの操作を行うまでは、パラメーターのバインドは有効なままです。

  • Option パラメーターを SQL_RESET_PARAMS に設定して SQLFreeStmt を呼び出すと、ステートメント ハンドルにバインドされているすべてのパラメーターが解放されます。

  • バインドされたパラメーター マーカーの序数に ParameterNumber が設定された SQLBindParameter の呼び出しは、前のバインディングを自動的に解放します。

アプリケーションでは、パラメーターをプログラム変数の配列にバインドし、SQL ステートメントをバッチで処理することもできます。 配列のバインドには、次の 2 種類があります。

  • 列方向のバインドは、各パラメーターを変数の独自の配列にバインドすることで行います。

    列方向のバインドは、属性が SQL_ATTR_PARAM_BIND_TYPE に設定され、ValuePtr が SQL_PARAM_BIND_BY_COLUMN に設定された SQLSetStmtAttr を呼び出すことによって指定されます。

  • 行方向のバインドは、SQL ステートメント内のすべてのパラメーターを 1 単位として、パラメーターの各変数を保持する構造体の配列にバインドすることで行います。

    行方向のバインドは、 SQLSetStmtAttr を呼び出し、 Attribute を SQL_ATTR_PARAM_BIND_TYPE に設定し、 ValuePtr を プログラム変数を保持する構造体のサイズに設定することで指定します。

SQL Server Native Client ODBC ドライバーは、文字またはバイナリ文字列パラメーターをサーバーに送信するときに、SQLBindParameterColumnSize パラメーターで指定された長さに値を埋め込みます。 ODBC 2.x アプリケーションで ColumnSize に 0 が指定されている場合、ドライバーはパラメーター値をデータ型の有効桁数に埋め込みます。 有効桁数は、SQL Server サーバーに接続しているときは 8,000、以前のバージョンの SQL Server に接続しているときは 255 です。 ColumnSize は、バリアント型列の場合はバイト単位です。

SQL Server では、ストアド プロシージャ パラメーターの名前を定義することをサポートします。 また、ODBC 3.5 では、SQL Server ストアド プロシージャを呼び出すときに使用する名前付きパラメーターのサポートも導入されました。 このサポートは次の目的に使用します。

  • ストアド プロシージャを呼び出し、そのストアド プロシージャ用に定義したパラメーターのサブセットに値を提供します。

  • アプリケーション内で、ストアド プロシージャの作成時に指定した順序とは異なる順序でパラメーターを指定します。

名前付きパラメーターは、Transact-SQL EXECUTE ステートメントまたは ODBC CALL エスケープ シーケンスを使用してストアド プロシージャを実行する場合にのみサポートされます。

ストアド プロシージャ パラメーター SQL_DESC_NAME が設定されている場合は、クエリ内のすべてのストアド プロシージャ パラメーターも SQL_DESC_NAME設定する必要があります。 パラメーターが SQL_DESC_NAME 設定されているストアド プロシージャ呼び出しでリテラルを使用する場合、リテラルは 形式 'name=value' を使用する必要があります。ここで、 name はストアド プロシージャのパラメーター名 (例: @p1))。 詳細については、「 名前によるパラメーターのバインド (名前付きパラメーター)」を参照してください。

参照

ステートメント パラメーターの使用