SQL Serverストアドプロシージャ

ストアドプロシージャは、高効率とセキュリティの利点を提供します。

Microsoft SQL Serverには、Transact-SQLステートメントを管理可能なブロックにグループ化することで、データベース開発プロセスを簡素化するストアドプロシージャメカニズムが用意されています。 ストアドプロシージャは、大部分のSQL Server開発者が享受している効率とセキュリティのメリットが、時間の先行投資の価値があることがわかっています。

ストアドプロシージャを使用する利点

開発者がストアドプロシージャを使用する理由

この技術の主な利点は次のとおりです。

ストアドプロシージャはユーザー定義関数と似ていますが、微妙な違いがあります。

構造

ストアドプロシージャは、他のプログラミング言語で見られる構造体に似ています。

実行時に指定された入力パラメータの形式でデータを受け取ります。 これらの入力パラメータ(実装されている場合)は、何らかの結果を生じる一連のステートメントの実行に使用されます。 この結果は、レコードセット、出力パラメータ、およびリターンコードを使用して呼び出し環境に戻されます。

一口のように聞こえるかもしれませんが、実際にはストアドプロシージャは非常に簡単です。

例

このページの下部に表示される目録という名前のテーブルに関連する実用的な例を見てみましょう。 この情報はリアルタイムで更新され、倉庫管理者は倉庫に保管されて出荷可能な製品のレベルを常にチェックしています。 以前は、各マネージャは次のようなクエリを実行していました。

SELECT製品、数量
FROM在庫
WHERE倉庫= 'FL'

その結果、SQL Serverでのパフォーマンスが非効率的になりました。 倉庫管理者がクエリを実行するたびに、データベースサーバーはクエリを再コンパイルして最初から実行しなければなりませんでした。 また、倉庫管理者は、テーブル情報にアクセスするためのSQLと適切な権限について知っておく必要がありました。

代わりに、ストアドプロシージャの使用によってプロセスを簡素化できます。 特定の倉庫の在庫レベルを取得するsp_GetInventoryというプロシージャのコードを次に示します。

CREATE PROCEDURE sp_GetInventory
@location varchar(10)
として
SELECT製品、数量
FROM在庫
WHERE倉庫= @場所

フロリダの倉庫管理者は、次のコマンドを発行して在庫レベルにアクセスできます。

EXECUTE sp_GetInventory 'FL'

ニューヨークの倉庫管理者は、同じストアドプロシージャを使用してその地域の在庫にアクセスできます。

EXECUTE sp_GetInventory 'NY'

確かに、これは簡単な例ですが、ここで抽象化の利点を見ることができます。 ウェアハウス・マネージャーは、SQLまたはプロシージャーの内部動作を理解する必要はありません。 パフォーマンスの観点から、ストアドプロシージャは不思議に作用します。 SQL Serverは実行計画を一度作成し、実行時に適切なパラメータをプラグインして再利用します。

ストアドプロシージャの利点を学んだので、ここに出てそれらを使用するようになりました。

いくつかの例を試して、達成されたパフォーマンスの向上を測定してみてください。あなたは驚くでしょう!

在庫表

ID 製品 倉庫 量
142 サヤインゲン NY 100
214 豆 FL 200
825 コーン NY 140
512 リママメ NY 180
491 トマト FL 80
379 スイカ FL 85