【SQL Server】トリガーを使って日時を自動更新する方法
先日SQL Serverのデータベースを使用していて、テーブルのレコードにINSERTやUPDATEをした日時(レコードの追加日時や更新日時)を残したいということがありました。
普通にSQLを書いてもいいのですが、INSERTやUPDATE時に自動で日時を設定するトリガーを使ってみたので、そのときに作ったトリガーを載せておきたいと思います。
前提条件
この記事では「example」テーブルにトリガーを設定していきます。
「example」テーブルには、以下の4カラムが設定されているものとします。
- inesrt_date_time(DateTime型):レコードがINSERTされた日時を保持します。
- update_date_time(DateTime型):レコードがINSERTまたはUPDATEされた日時を保持します。
- delete_date_time(DateTime型):レコードがDELETE(論理削除)された日時を保持します。
- is_delete(Bit型):論理削除フラグ(0:非削除、1:削除)です。INSERT時には0が格納され、削除時にはis_deleteを1にするUPDATEを行うといった使い方をします。
INSERTトリガー(追加日時・更新日時の設定)
まず2行目のIFで、すでにトリガーが存在している場合はDROPして作り直すようにしています。
4行目では「example」テーブルに対してトリガーを作成します。
トリガーの実行タイミングはINSERTの後(5行目)にして、追加日時(insert_date_time)と更新日時(update_date_time)に現在日時を設定するUPDATEを実行します。(7〜12行目)
UPDATEトリガー(更新日時・削除日時の設定)
2行目のIFはINSERTトリガーと同様で、すでにトリガー存在時はDROPで作り直します。
4行目で「example」テーブルを指定し、実行タイミングはUPDATEの後(5行目)です。
7〜11行目では、更新日時(update_date_time)に現在日時を設定するUPDATEを実行しています。
12〜17行目では、論理削除フラグ(is_delete)が1(削除)になったとき、削除日時(delete_date_time)に現在日時を設定するUPDATEを実行しています。
まとめ:共通の日時更新などにはトリガーが便利!
以上、トリガーを使った日時の自動更新方法でした。
すべてのテーブルが共通で日時項目を持っていて、レコード更新時などに共通処理を行う場合などは、毎回SQLを書くよりもトリガーを使った方が簡単です。
ただしトリガーは使いすぎると重くなったりもするので、メリット・デメリットを把握して利用していきましょう。
コメントを残す