ユーザーテーブル(id, name, address)
に作成するストアドプロシージャの一般的な例をいくつかご紹介します。
ストアドプロシージャは、特定の処理をひとまとまりにしてデータベースに保存しておくものです。
これにより、複数のアプリケーションから同じ処理を安全かつ効率的に実行できるようになります。
ストアドプロシージャの主な種類
テーブルの操作(CRUD: Create, Read, Update, Delete)に対応する形でストアドプロシージャを作成するのが一般的です。
1. データの挿入(C: Create)
新しいユーザーを追加するためのプロシージャです。
CREATE PROCEDURE dbo.InsertUser
@name NVARCHAR(50),
@address NVARCHAR(100)
AS
BEGIN
INSERT INTO UserTable (name, address)
VALUES (@name, @address);
END;
GO
利用例:
アプリケーションから新しいユーザーの名前と住所を引数として渡し、このプロシージャを呼び出すことで、安全にレコードが挿入されます。
2. データの取得(R: Read)
特定の条件に合うユーザーの情報を取得するためのプロシージャです。
CREATE PROCEDURE dbo.GetUserByName
@name NVARCHAR(50)
AS
BEGIN
SELECT id, name, address
FROM UserTable
WHERE name = @name;
END;
GO
利用例:
ユーザーが検索フォームに名前を入力した際、その名前を引数としてこのプロシージャを呼び出し、該当するユーザー情報を取得します。
3. データの更新(U: Update)
既存のユーザーの情報を更新するためのプロシージャです。
CREATE PROCEDURE dbo.UpdateUserAddress
@id INT,
@newAddress NVARCHAR(100)
AS
BEGIN
UPDATE UserTable
SET address = @newAddress
WHERE id = @id;
END;
GO
利用例:
ユーザーが住所を変更した場合、ユーザーのidと新しい住所を引数として渡し、このプロシージャを呼び出して情報を更新します。
4. データの削除(D: Delete)
特定のユーザーを削除するためのプロシージャです。
CREATE PROCEDURE dbo.DeleteUser
@id INT
AS
BEGIN
DELETE FROM UserTable
WHERE id = @id;
END;
GO
利用例:
管理者が特定のユーザーアカウントを削除する際に、idを引数としてこのプロシージャを呼び出します。
なぜストアドプロシージャを使うのか?
セキュリティ: SQLインジェクション攻撃を防ぐことができます。引数として渡された値は、SQL文の一部ではなくデータとして扱われるため、不正なコードが実行されるのを防ぎます。
パフォーマンス: 実行プランが一度コンパイルされてキャッシュされるため、再利用する際に高速に実行できます。
保守性: データベース内でロジックを一元管理できるため、アプリケーションコードを変更することなく、ビジネスロジックを修正できます。
このように、ストアドプロシージャは、CRUD操作を抽象化し、安全で効率的なデータベースアクセスを実現するための強力なツールです。