パラメータのバインド

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

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

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

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

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

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

    列方向のバインドは、Attribute に SQL_ATTR_PARAM_BIND_TYPE を、ValuePtr に SQL_PARAM_BIND_BY_COLUMN をそれぞれ設定し、SQLSetStmtAttr を呼び出すことによって指定します。

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

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

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 エスケープ シーケンスを使用してストアド プロシージャを実行するときだけです。