パラメータ マーカー (データベース エンジン)

パラメータ マーカーは ADO、OLE DB、および ODBC ベースのデータベース API によってサポートされます。パラメータ マーカーは疑問符 (?) であり、Transact-SQL ステートメント内の入力式または出力式の位置に追加されます。入力式または出力式で値を変えて同じ Transact-SQL ステートメントを何度も実行するような場合に、パラメータ マーカーを使用することにより、アプリケーションの最適化を図ることができます。

たとえば、あるアプリケーションで、5 社の株式銘柄が入力され、各銘柄の現在のデータを取得するストアド プロシージャが呼び出されるとします。このとき、次のような処理をアプリケーションで行えます。

  • 次の Transact-SQL ステートメントを準備します。

    EXEC GetQuoteProcedure @StockSymbolParameter = ?
    
  • アプリケーション変数をパラメータ マーカー (?) にバインドします。

  • ループを実行します。

    1. 次の銘柄記号をバインド先の変数に移動します。

    2. ステートメントを実行し、その銘柄の相場を取得します。

パラメータ マーカーをマッピングできるのはストアド プロシージャのパラメータだけではありません。パラメータ マーカーは、入力式が使用されている任意の場所で次のように使用できます。

UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?

ストアド プロシージャの出力パラメータおよびリターン コードをマッピングすることもできます。アプリケーションからストアド プロシージャを実行するとき、出力パラメータまたはリターン コードのデータ値が OLE DB プロバイダまたは ODBC ドライバによって、パラメータ マーカーにバインドされた変数に移動されます。

たとえば、アプリケーションでは次の手順を実行できます。この手順によって、整数のリターン コードおよび文字の出力パラメータが返されます。

  1. 次のステートメントを準備します。

    {? = CALL MyProc (?)}
    
  2. 最初のパラメータ マーカーを整数変数に、2 番目のマーカーを文字配列にバインドします。

  3. ステートメントを実行します。

  4. ストアド プロシージャから返された結果セットをすべてフェッチするか、取り消します。

この時点で、Microsoft OLE DB Provider for SQL Server または SQL Server ODBC ドライバによってリターン コードおよび出力パラメータ値がバインド先の変数に代入されます。Microsoft SQL Server は、クライアントに返す最後のパケットで出力パラメータおよびリターン コードの値を返します。したがって、アプリケーションは、リターン コード値と出力パラメータ値にアクセスする前に、ストアド プロシージャが返したすべての結果セットを処理するか取り消す必要があります。

ADO API は、これとは異なるプロセスでストアド プロシージャを実行します。ADO アプリケーションでは、次の操作が実行されます。

  1. Command オブジェクトの種類を adCmdStoredProc に設定します。

  2. コマンド テキストをプロシージャの名前に設定します。

  3. すべてのパラメータおよびリターン コードをアプリケーション変数にバインドする Parameters コレクションを構築します。

  4. Command オブジェクトを実行します。

パラメータ マーカーは、特定のデータ型のデータベース オブジェクトに関連付けられます。関連付けられているデータベース オブジェクトと異なるデータ型の変数にパラメータ マーカーをバインドする場合、OLE DB プロバイダまたは ODBC ドライバでデータを変換する必要があります。たとえば、整数のリターン コードが文字配列にバインドされた場合は、OLE DB プロバイダまたは ODBC ドライバでリターン コードの整数データを文字列に変換する必要があります。サポートされるデータ型変換の詳細については、OLE DB Provider for SQL Server および SQL Server ODBC ドライバのドキュメントを参照してください。