SQL Server のストアドプロシージャを変更・削除する
SQL Server のストアドプロシージャを変更・削除する
前回 「 SQL Server のストアドプロシージャを作成する 」 では、ユーザー定義ストアドプロシージャを作ってみました。
今回は、既存のーザー定義ストアドプロシージャを変更・削除してみましょう。
基本的にはユーザー定義関数の変更・削除と、 FUNCTION と PROCEDURE というキーワードが違う以外はほぼ同じです。
「 SQL Server のストアドプロシージャを作成する 」 で生成した、uspStudentDelete というストアドプロシージャが存在している前提で進めます。
ストアドプロシージャの変更
ユーザー定義のストアドプロシージャを変更するには ALTER PROCEDURE を使います。
シンプルなユーザー定義のストアドプロシージャを変更する構文は次の通りです。
CREATE PROCEDURE [ ストアドプロシージャ名 ] [ @入力パラメーター名 1 ] [ 入力パラメーター名 1 のデータ型 ], [ @入力パラメーター名 2 ] [ 入力パラメーター名 2 のデータ型 ], [ @入力パラメーター名 3 ] [ 入力パラメーター名 3 のデータ型 ], .. AS BEGIN [ ストアドプロシージャで処理したい一連の T-SQL ステートメント ] END;
CREATE の代わりに ALTER というキーワードを使う以外は CREATE の時と同じです。
スクリプトを別でソース管理しているのでなければ、既存のストアドプロシージャを変更する時は、データベースに保存されているものを元に変更することも多いかと思います。
生成したユーザー定義のストアドプロシージャは、SQL Server Management Studio のプログラミング > ストアド プロシージャ の箇所で見つけることができます。
変更したいユーザー定義ストアドプロシージャを選んで右クリックで [変更] を選択すると、次のように ALTER PROCEDURE のステートメントがクエリー画面に出てきます。
例えば、uspStudentDelete では、TestResult テーブルに StudentID のデータが存在すれば、アウトプットパラメータで 「 TestResult が存在するので削除できません。 」 というメッセージを返していましたが、代わりに TestResultテーブルの、その StudentID のデータも削除してしまい、その際はアウトプットパラメータで 「 TestResult のデータも削除しました。 」 と返すように変更してみましょう。
ALTER PROCEDURE [dbo].[uspStudentDelete] @StudentID INT, @WarningMessage NVARCHAR(100) OUTPUT AS BEGIN IF EXISTS (SELECT * FROM TestResult WHERE StudentID = @StudentID) BEGIN DELETE FROM TestResult WHERE StudentID = @StudentID; SET @WarningMessage = N'TestResult も削除しました。'; END DELETE FROM Student WHERE StudentID = @StudentID; END;
スクリプトを変更後に [実行] ボタンをクリックすると、ストアドプロシージャが変更されます。
現在の Student テーブルと TestResult テーブルのデータは次のようになっています。
以下のスクリプトを実行して、前回削除できなかった StudentID = 1 を削除してみましょう。
DECLARE @WarningMessage NVARCHAR(100); EXEC uspStudentDelete 1, @WarningMessage OUTPUT; PRINT @WarningMessage;
[ 実行結果 ]
メッセージが表示され、StudentID = 1 が削除されました。
ストアドプロシージャの削除
ストアドプロシージャを削除するには DROP PROCEDURE を使います。
DROP PROCEDURE [ ストアドプロシージャ名 ];
それでは、次のスクリプトを実行して、 uspStudentDelete を削除してみましょう。
DROP PROCEDURE uspStudentDelete;
uspStudentDelete が削除されました。