ストアド プロシージャの基本
Microsoft SQL Server のストアド プロシージャは、次のことが可能な点で、他のプログラミング言語のプロシージャと同様です。
- 入力パラメータを受け取り、呼び出し元のプロシージャまたはバッチに出力パラメータの形式で複数の値を返す。
- 他のプロシージャの呼び出しなど、データベース内での操作を実行するプログラミング ステートメントを含む。
- 呼び出し元のプロシージャ、またはバッチにステータス値を返し、成功、失敗、および失敗の原因を示す。
Transact-SQL の EXECUTE ステートメントを使用して、ストアド プロシージャを実行できます。ストアド プロシージャが関数と異なる点は、名前の代わりに値を返さないことと、式の中で直接使用できないことの 2 点です。
クライアント コンピュータにローカルに格納した Transact-SQL プログラムではなく、SQL Server 内のストアド プロシージャを使用すると、次の利点があります。
- ストアド プロシージャはサーバーに登録されます。
- ストアド プロシージャではセキュリティ属性 (権限など) と所有権の継承を利用でき、証明書を添付することもできます。
ストアド プロシージャが参照するオブジェクトに対する直接的な権限がユーザーになくても、ストアド プロシージャを実行する権限をユーザーに許可することができます。 - アプリケーションのセキュリティを向上できます。
パラメータ化されたストアド プロシージャは、SQL Injection 攻撃からアプリケーションを保護するうえで有効です。詳細については、「SQL インジェクション」を参照してください。 - モジュール プログラミングが可能です。
一度プロシージャを作成すれば、プログラム中で何度でも呼び出せます。これにより、アプリケーションの管理が容易になり、アプリケーションがデータベースにアクセスする動作を統一できます。 - ストアド プロシージャは名前付きコードなので、遅延バインドが可能です。
これにより、間接指定が可能になり、コードの拡張が容易になります。 - ネットワーク トラフィックが減少します。
数百行の Transact-SQL コードをネットワークに送信するのではなく、プロシージャ内のコードを実行する 1 つのステートメントを使用することで、数百行のコードが必要な処理を実行できます。