SQLServerトリガー

今回は業務の一部使用したでデータ整合性を保つための【SQLServer】トリガーについて記載します。

SQLServerトリガーとは…
テーブルに対して操作(Insert・Update・ Delete)を起因として自動的に実行される機能です。

例えば、下記のようにtable1とtable2が連動しているテーブルがある場合

table1(id1,seq,column1_1,column1_2)
table2(id1,key,column2_1,column2_2)

SELECT * FROM table1
LEFT JOIN table2 ON table1.id1 = table2.id1

table1のテーブルを消した場合、紐づいているtable2を消す事が多いと思います。
この場合に【SQLServer】トリガーで連動してtable2も消すように仕込む(下記のSQL)。

CREATE TRIGGER trg1 –①
ON [table1] AFTER –②
DELETE AS BEGIN –③
DELETE –④
FROM
table2
WHERE
id1 = (SELECT id1 FROM deleted) –⑤
END

①trg1はトリガーの任意の名前
②対象テーブル(table1)に対してのトリガー
③削除実行された場合(INSERTやUPDATEでも可能)
④トリガー処理を記載
⑤削除されるテーブル情報(登録・更新:inserted、削除:deleted)

物理削除やバックアップテーブルを作成する場合は便利だと思います。
論理削除の場合は条件などいると思うので難しいと思います。

トリガー一覧は下記のSQLで閲覧可能です。

SELECT
Ob.name AS テーブル名
, TR.name AS トリガー名
, TE.type_desc AS トリガー操作
, Sm.definition
FROM
sys.triggers TR
INNER JOIN sys.objects Ob
ON TR.parent_id = Ob.object_id
INNER JOIN sys.trigger_events TE
ON TE.object_id = TR.object_id
INNER JOIN sys.all_sql_modules Sm
ON Sm.object_id = TR.object_id

トリガーを削除したい場合はこちら。
DROP TRIGGER [トリガー名]

プログラムを触らなくてよいのと
影響範囲でのプログラム側での対応漏れがなくなると思いますが
SQLServerの設定のためメンテナンスなどを忘れないように注意しないといけないですね。

以上。

“SQLServerトリガー” への 0 件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です