ストアドプロシージャは、1つにコンパイルされたSQLステートメントのグループです。ストアドプロシージャには、ビジネスロジックやその他のプログラミング構造を含めることができます。
SQL Serverでは、ストアドプロシージャは、1つ以上のTransact-SQLステートメントのグループ、またはMicrosoft .NET Frameworkの共通ランタイム言語(CLR)メソッドへの参照です。
プログラマビリティ
ストアドプロシージャは、単なる長いスクリプトではありません。これは、特に ストアドプロシージャ の下でSQLServerに保存されたスクリプトです。 ノード、およびそれはできます:
- 入力パラメーターを受け入れます(そして、呼び出し側プログラムに出力パラメーターの形式で複数の値を返します)。
- プログラミングステートメントが含まれています。
- ステータス値を呼び出し元のプログラムに返し、成功または失敗、および失敗の理由を示します。
ストアドプロシージャには、多くの場合、ビジネスロジックが含まれています。たとえば、ストアドプロシージャは、渡されたパラメータを受け入れ、IF
を使用してそれらのパラメータに対してテストできます。 ステートメント。たとえば、パラメータが1つの値の場合はこれを行い、別の値の場合はこれを行います。
ストアドプロシージャは、作成されるとすぐに解析および最適化されてからメモリに格納されるため、アプリケーションのパフォーマンスを向上させることができます。ストアドプロシージャを介した条件付きクエリの実行は非常に高速です。ネットワークを介してSQLServerにクエリを送信し、ネットワークを介してすべてのデータを返し、フィルタリングして選択できるアプリケーションと比較して、関心のあるレコードのみ。
ストアドプロシージャの利点
ストアドプロシージャを使用する主な利点のいくつかを次に示します。
メリット | 説明 |
---|---|
モジュラープログラミング | ストアドプロシージャを一度作成してから、アプリケーションのさまざまな部分から(さらには複数のアプリケーションからでも)何度も呼び出すことができます。 |
パフォーマンス | ストアドプロシージャは、コードの実行を高速化し、ネットワークトラフィックを削減します。
|
セキュリティ | ユーザーは、ステートメントを直接実行しなくても、ストアドプロシージャを実行できます。したがって、ストアドプロシージャは、通常はこれらのタスクにアクセスできないユーザーに高度なデータベース機能を提供できますが、この機能は厳密に制御された方法で利用できるようになります。 |
ストアドプロシージャを作成する方法
ストアドプロシージャを作成するには、CREATE PROCEDURE
を使用します ステートメントの後に、ストアドプロシージャを構成するコードが続きます。ストアドプロシージャがパラメータを受け入れる場合は、名前の後にパラメータを含める必要があります。
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
例
ストアドプロシージャを作成してから、そのストアドプロシージャを実行する例を次に示します。
-
ストアドプロシージャを作成する
このチュートリアル全体で作成した音楽データベースに対して次のステートメントを実行します。
この例では、AlbumsFromArtistというストアドプロシージャを作成します。ストアドプロシージャの実行時に指定されたアーティストからすべてのアルバムを選択します。
CREATE PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT AlbumName, ReleaseDate FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE Artists.ArtistName = @ArtistName; GO
-
ストアドプロシージャを表示する
Programmability> Stored Proceduresを展開します 該当するデータベースの下のノードをクリックして、新しく作成されたストアドプロシージャを確認します。ストアドプロシージャのパラメータを展開することもできます ノードを実行するときに渡す必要のあるパラメーターを確認します。
-
ストアドプロシージャを実行する
ストアドプロシージャが作成されたので、
EXECUTE
を使用して実行できます。 ステートメントと必要なパラメータの受け渡し。この例では、アーティストの名前を渡す必要があります。
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
または、パラメーターを渡すときにパラメーター名を省略できます。このように:
EXECUTE spAlbumsFromArtist "Devin Townsend";
ストアドプロシージャを変更する
ALTER PROCEDURE
を使用してストアドプロシージャを変更できます 声明。ビューを変更する場合と同様に、新しいストアドプロシージャ定義を適用するだけで、ストアドプロシージャを変更できます。
-
ストアドプロシージャを変更する
次のステートメントを実行します。これにより、ストアドプロシージャによって返される結果に新しい列が追加されます。列名にもエイリアスを追加します。
ALTER PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT al.AlbumName, al.ReleaseDate, g.Genre FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON g.GenreId = al.GenreId WHERE ar.ArtistName = @ArtistName; GO
-
ストアドプロシージャを実行する
Genre
を追加しました 列をビューに追加すると、ストアドプロシージャは、実行時にその列を返すようになりました。EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";