備忘録として後世の自分に託す
はじめに
SQL Server データベースプロジェクトで作成する
履歴を残すテーブルを作成する
例:Departmentテーブル
CREATE TABLE [dbo].[Department]
(
[Id] INT NOT NULL PRIMARY KEY,
[DepartmentName] NVARCHAR(10) NULL
)
今回はDepartmentテーブルに対してinserted, update, deleteなどの操作が行われたときに履歴を残すためにTriggerを使ってみる
履歴テーブルを作成する
まずは履歴を保存しておくテーブルを作っておく
例:DepartmentHistoryテーブル
CREATE TABLE [dbo].[DepartmentHistory]
(
[Id] INT NOT NULL PRIMARY KEY,
[DepartmentName] NVARCHAR(10) NULL,
[Action] NVARCHAR(10) NULL,
[UpdateDate] DATETIME2 NULL,
)
- [Action]:どんな操作が行われたかを保管する列
- [UpdateDate]:更新が行われ時間を保管する列
Triggerを作成して履歴を残す処理を実装する
Triggerを追加する
今回は一例としてDepartmentテーブルに対してUPDATEが走ったときに履歴テーブルへとデータをINSERTするような処理を書いてみます。
例:DepartmentUpdateTrigger
CREATE TRIGGER [DepartmentUpdateTrigger]
ON [dbo].[Department] // どのテーブルに対して?
FOR UPDATE // どんな操作が行われたら?
AS
BEGIN
INSERT INTO
[dbo].[DepartmentHistory](
[Id],
[DepartmentName],
[Action],
[UpdateDate]
)
SELECT
[Id],
[DepartmentName],
'UPDATE',
GETUTCDATE()
FROM
inserted
END
- FOR: 今回の例ではUPDATEだが、INSERT、DELETEなどでも同じように描ける。
- inserted: insertedテーブルからSELECTして履歴テーブルへと登録している。
- もしDELETE文がトリガーならば、ここはdeletedで実際にdeletedしたデータがテーブルとして表されている。
以上によりDepartmentテーブルに対してデータが更新されるとDepartmentHistoryテーブルに更新が走るので試してみてください。
まとめ
爆速で履歴作れたのでいい感じだと思いました。
データベースの知識が乏しく感じるのでもっと勉強せねばならない。