【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を書くよりもトリガーを使った方が簡単です。
ただしトリガーは使いすぎると重くなったりもするので、メリット・デメリットを把握して利用していきましょう。

Share

  • Twitter Shareボタン
  • Facebook Shareボタン
  • はてなブックマーク Shareボタン
  • LINE Shareボタン

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。