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 のプログラミング > ストアド プロシージャ の箇所で見つけることができます。

SQL Server のストアドプロシージャを変更・削除する 1

変更したいユーザー定義ストアドプロシージャを選んで右クリックで [変更] を選択すると、次のように ALTER PROCEDURE のステートメントがクエリー画面に出てきます。

SQL Server のストアドプロシージャを変更・削除する 2

SQL Server のストアドプロシージャを変更・削除する 3


例えば、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;

スクリプトを変更後に [実行] ボタンをクリックすると、ストアドプロシージャが変更されます。

SQL Server のストアドプロシージャを変更・削除する 5


現在の Student テーブルと TestResult テーブルのデータは次のようになっています。

SQL Server のストアドプロシージャを変更・削除する 6

以下のスクリプトを実行して、前回削除できなかった StudentID = 1 を削除してみましょう。

DECLARE @WarningMessage NVARCHAR(100);

EXEC uspStudentDelete 
        1, 
        @WarningMessage OUTPUT;

PRINT @WarningMessage;

[ 実行結果 ]
SQL Server のストアドプロシージャを変更・削除する 7
SQL Server のストアドプロシージャを変更・削除する 8

メッセージが表示され、StudentID = 1 が削除されました。


ストアドプロシージャの削除

ストアドプロシージャを削除するには DROP PROCEDURE を使います。

DROP PROCEDURE [ ストアドプロシージャ名 ];

それでは、次のスクリプトを実行して、 uspStudentDelete を削除してみましょう。

DROP PROCEDURE uspStudentDelete;

SQL Server のストアドプロシージャを変更・削除する 9

uspStudentDelete が削除されました。

© 2010-2024 SQL Server 入門