SQLServerでのInsert, Update, Deleteのトリガー実装と管理方法

データベース,SQL データベース
データベース

本記事では、SQLServerにおけるInsert、Update、Deleteのトリガーの作成方法、無効化、有効化、削除、更新の方法について詳しく解説します。

トリガーは、特定のイベントが発生した際に自動で実行されるストアドプロシージャの一種で、データベースの整合性を保つために重要な役割を果たします。

この記事では、実際のサンプルコードとその実行結果を用いて、SQLServerにおけるトリガーの活用方法を具体的に説明します。

トリガーの概要

トリガーは、SQLServerにおいて特定のデータ操作(Insert、Update、Delete)が発生した際に自動的に実行される仕組みです。

トリガーを活用することで、データベースの整合性を保つことができます。

Insertトリガーの実装方法

Insertトリガーは、レコードがテーブルに挿入された時に実行されるトリガーです。

以下のサンプルは、テーブルに新規データが挿入された際に、別のテーブルにその情報を記録するトリガーの作成方法です。

Insertトリガーのサンプルコード

まずは、Insertトリガーを作成するためのSQL文を紹介します。

以下は、Employeeテーブルに新しいデータが挿入されるたびに、Employee_Auditテーブルにログを記録するトリガーです。

CREATE TRIGGER trgAfterInsert ON Employee
FOR INSERT
AS
BEGIN
    INSERT INTO Employee_Audit (EmployeeID, Action, ActionDate)
    SELECT i.EmployeeID, 'INSERT', GETDATE()
    FROM Inserted i
END

上記のトリガーは、Employeeテーブルに新規レコードが挿入されるたびに、Employee_Auditテーブルに挿入されたレコードのIDと操作情報を記録します。

Insertトリガーの実行結果

以下は、Employeeテーブルに新しいデータを挿入した際の実行結果です。

INSERT INTO Employee (EmployeeID, Name, Position)
         VALUES (1, 'John Doe', 'Manager');

この挿入操作によって、Employee_Auditテーブルに以下のようなレコードが追加されます。

SELECT * FROM Employee_Audit;
EmployeeID | Action  | ActionDate
-----------|---------|-----------------------
1          | INSERT  | 2024-09-30 10:00:00.000

Updateトリガーの実装方法

Updateトリガーは、テーブル内のデータが更新された時に自動的に実行されます。

次の例では、Employeeテーブルのレコードが更新されるたびに、更新内容をEmployee_Auditテーブルに記録します。

Updateトリガーのサンプルコード

Updateトリガーを作成するためのSQLは以下の通りです。

CREATE TRIGGER trgAfterUpdate ON Employee
FOR UPDATE
AS
BEGIN
    INSERT INTO Employee_Audit (EmployeeID, Action, ActionDate)
    SELECT i.EmployeeID, 'UPDATE', GETDATE()
    FROM Inserted i
END

このトリガーは、Employeeテーブルのデータが更新された時に、Employee_Auditテーブルに更新情報を記録します。

Updateトリガーの実行結果

以下は、Employeeテーブルのデータを更新した際のSQLとその実行結果です。

UPDATE Employee 
SET Position = 'Senior Manager' 
WHERE EmployeeID = 1;

この更新操作により、Employee_Auditテーブルに以下のようなレコードが追加されます。

SELECT * FROM Employee_Audit;
EmployeeID | Action  | ActionDate
-----------|---------|-----------------------
1          | UPDATE  | 2024-09-30 10:10:00.000

Deleteトリガーの実装方法

Deleteトリガーは、レコードが削除された時に自動的に実行されます。

以下は、Employeeテーブルからレコードが削除されるたびに、その削除されたレコードの情報をEmployee_Auditテーブルに記録するトリガーの作成例です。

Deleteトリガーのサンプルコード

Deleteトリガーを作成するためのSQL文です。

CREATE TRIGGER trgAfterDelete ON Employee
FOR DELETE
AS
BEGIN
    INSERT INTO Employee_Audit (EmployeeID, Action, ActionDate)
    SELECT d.EmployeeID, 'DELETE', GETDATE()
    FROM Deleted d
END

このトリガーは、Employeeテーブルのレコードが削除された時に、Employee_Auditテーブルに削除されたレコードの情報を記録します。

Deleteトリガーの実行結果

以下は、Employeeテーブルからデータを削除した際のSQLとその結果です。

DELETE FROM Employee WHERE EmployeeID = 1;

この削除操作によって、Employee_Auditテーブルに以下のレコードが追加されます。

SELECT * FROM Employee_Audit;
EmployeeID | Action  | ActionDate
-----------|---------|-----------------------
1          | DELETE  | 2024-09-30 10:15:00.000

トリガーの無効化と有効化

SQLServerでは、特定のトリガーを無効化したり再度有効化することが可能です。

以下のSQL文でトリガーの無効化と有効化を行います。

トリガーの無効化

以下のSQLは、特定のテーブルに対するトリガーを無効化する方法です。

DISABLE TRIGGER trgAfterInsert ON Employee;

トリガーの有効化

以下のSQLは、無効化されたトリガーを再び有効化するためのものです。

ENABLE TRIGGER trgAfterInsert ON Employee;

トリガーの削除

不要になったトリガーは、以下のSQLを使用して削除することができます。

DROP TRIGGER trgAfterInsert;

トリガーの更新

トリガーの内容を更新したい場合、一度トリガーを削除してから再作成する必要があります。

以下はその手順です。

トリガーの更新手順

まず、既存のトリガーを削除します。

DROP TRIGGER trgAfterInsert;

その後、トリガーを再作成します。

CREATE TRIGGER trgAfterInsert ON Employee
FOR INSERT
AS
BEGIN
    -- 新しいロジックをここに追加
    INSERT INTO Employee_Audit (EmployeeID, Action, ActionDate)
    SELECT i.EmployeeID, 'INSERT', GETDATE()
    FROM Inserted i
END

まとめ

この記事では、SQLServerにおけるInsert、Update、Deleteのトリガーの実装方法、無効化、有効化、削除、更新方法について説明しました。

トリガーを活用することで、データ操作に対して自動的に処理を追加することができ、データベースの整合性や監査を容易に行うことが可能です。

SQLServerでのトリガーの基本的な操作を理解し、適切に活用していくことで、データベース管理を効率化できます。

タイトルとURLをコピーしました