ストアド プロシージャの基本

MicrosoftSQL Server のストアド プロシージャは、次のことが可能な点で、他のプログラミング言語のプロシージャと同様です。

  • 入力パラメータを受け取り、呼び出し元のプロシージャまたはバッチに出力パラメータの形式で複数の値を返す。

  • 他のプロシージャの呼び出しなど、データベース内での操作を実行するプログラミング ステートメントを含む。

  • 呼び出し元のプロシージャ、またはバッチにステータス値を返し、成功、失敗、および失敗の原因を示す。

Transact-SQL の EXECUTE ステートメントを使用して、ストアド プロシージャを実行できます。ストアド プロシージャが関数と異なる点は、名前の代わりに値を返さないことと、式の中で直接使用できないことの 2 点です。

クライアント コンピュータにローカルに格納した Transact-SQL プログラムではなく、SQL Server 内のストアド プロシージャを使用すると、次の利点があります。

  • ストアド プロシージャはサーバーに登録されます。

  • ストアド プロシージャではセキュリティ属性 (権限など) と所有権の継承を利用でき、証明書を添付することもできます。

    ストアド プロシージャが参照するオブジェクトに対する直接的な権限がユーザーになくても、ストアド プロシージャを実行する権限をユーザーに許可することができます。

  • アプリケーションのセキュリティを向上できます。

    パラメータ化されたストアド プロシージャは、SQL Injection 攻撃からアプリケーションを保護するうえで有効です。詳細については、「SQL インジェクション」を参照してください。

  • モジュール プログラミングが可能です。

    一度プロシージャを作成すれば、プログラム中で何度でも呼び出せます。これにより、アプリケーションの管理が容易になり、アプリケーションがデータベースにアクセスする動作を統一できます。

  • ストアド プロシージャは名前付きコードなので、遅延バインドが可能です。

    これにより、間接指定が可能になり、コードの拡張が容易になります。

  • ネットワーク トラフィックが減少します。

    数百行の Transact-SQL コードをネットワークに送信するのではなく、プロシージャ内のコードを実行する 1 つのステートメントを使用することで、数百行のコードが必要な処理を実行できます。