Skip to main content

SQL Server用のストアドプロシージャの作成

Stored procedures in sql server Part 18 (六月 2025)

Stored procedures in sql server Part 18 (六月 2025)
Anonim

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

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

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

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

  • プリコンパイルされた実行: SQL Serverは各ストアドプロシージャを一度コンパイルしてから、実行計画を再利用します。ストアドプロシージャが繰り返し呼び出されると、パフォーマンスが大幅に向上します。
  • クライアント/サーバトラフィックの削減: ご使用の環境でネットワーク帯域幅が懸念される場合は、ストアドプロシージャが長いSQLクエリをワイヤを介して送信される1行に減らすことができます。
  • 効率的なコードとプログラミングの抽象化の再利用: ストアドプロシージャは、複数のユーザーおよびクライアントプログラムで使用できます。計画的にそれらを活用すると、開発サイクルの短縮に時間がかかります。
  • 強化されたセキュリティコントロール: 基礎となる表の権限とは独立してストアド・プロシージャを実行する権限をユーザーに付与できます。

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

構造

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

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

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

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

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サヤインゲンNY100
214FL200
825コーンNY140
512リママメNY180
491トマトFL80
379スイカFL85