SQLServerでトリガーを扱ってみる

公開日: : 最終更新日:2016/07/19 SQL Server , , ,

INSERT、UPADTE、DELETEトリガーを扱ってみる

SQLServerにはテーブルに対して「トリガー」を設定することが
でき、テーブルに挿入、更新、削除されるごとに
それらの処理を呼び出すことが可能です。

テーブルの準備

今回はデータを挿入、更新、削除されるテーブルと
そのトリガーでレコードが自動的に挿入されるテーブルを
用意します。


INSERTトリガー

test_main_tableにデータが挿入されると呼び出されるトリガーを
作成します。

このトリガーではtest_main_tableに挿入された内容と、
トリガーの種別「1」をtest_sub_tableに設定します。
test_main_tableに挿入された行のデータは「inserted」という
特殊なテーブルから取得できます。

UPDATEトリガー

test_main_tableのデータが更新されると呼び出されるトリガーを
作成します。

このトリガーではtest_main_tableに更新された内容と、
トリガーの種別「2」をtest_sub_tableに設定します。
test_main_tableで更新された行のデータは「inserted」という
特殊なテーブルから取得できます。

DELETEトリガー

test_main_tableのデータが削除されると呼び出されるトリガーを
作成します。

このトリガーではtest_main_tableで削除された内容と、
トリガーの種別「3」をtest_sub_tableに設定します。
test_main_tableで削除された行のデータは「deleted」という
特殊なテーブルから取得できます。

INSERT,UPDATE,DELETEトリガーの動作確認

test_main_tableにデータを挿入し、そのデータを更新後、
削除します。

上記のSQLを実行後test_sub_tableの内容を検索します。

実行結果は

となり、データ挿入時、更新時、削除時にそれぞれの
トリガーが動作していることが確認できます。
(trigger_kindがそれぞれのトリガーに対応しています。)

トリガーの注意事項

トリガーで実行したSQLでエラーが発生すると
トランザクションの状況によってはロールバックが発生し、
メインテーブルの変更も無効になったりするので
注意が必要です。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly
  • 関連記事

    指定された月の日数をSQLで求める

    指定された月の日数をSQLで求める SQLServerには該当月の日数を求める関数がないので

    記事を読む

    複数のストアドプロシージャ (stored procedure) でローカルテンポラリテーブルを共有する

    ローカルテンポラリテーブルを共有する 先日来より悩んでいたSQLServerでの SQL

    記事を読む

    SQLで当月の第何週目の何曜日か取得する

    SQLで今日は第何週、何曜日か取得する SQLServerでは関数で今日は当月の第何週目か取得する

    記事を読む

    テーブルから列を削除する「ALTER TABLE テーブル名 DROP COLUMN 削除する列名」

    既存のテーブルから指定した列を削除する 既存のテーブルで不要になった列を削除する方法です。

    記事を読む

    ISNULL()関数を使ってSQLでIF文を使わずに条件を分岐する

    ISNULLをIF文の代わりに使ってみる SQLでIFを書けばWHERE句の内容を変えて検索できま

    記事を読む

    日付の重複をSQLで検索する

    SQLを使って期間の重複を見つけ出す SQLを使って、開始日付、終了日付を持っているレコードの

    記事を読む

    テーブルにユニークインデックス(UNIQUE INDEX)を作成する

    テーブルにユニークインデックス(UNIQUE INDEX)を作成 すでに作成したテーブルにユニ

    記事を読む

    SQLで日付範囲の重複をチェックする

    SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェックする必要が出たので調査しまし

    記事を読む

    SELECT INTOで既存テーブルのデータを新規テーブルにコピーする

    既存テーブルのデータを新規テーブルにコピーします。 簡単だが結構忘れるのでメモします。

    記事を読む

    SQLServerでカンマ区切り (CSV) で文字列取得

    SQLの取得結果をカンマ区切りで取得 Where句のINにSQLで取得した結果を直接利用したり

    記事を読む

    データベースに登録されている内容を固定長の長さで出力する(2)

    登録されている内容を固定長の長さで出力する 先日作成したデータベース

    SQLServer
    SQLServerで「WITH ROLLUP」を使って小計、総合計を出力する

    「WITH ROLLUP」を使って小計、総合計を出力 SQLServ

    SQLServerではTRIM関数がありません

    SQLServerでは空白を取り除くTRIM関数がない SQLSer

    SQL_VARIANT_PROPERTYを使ってカラムの基本データ型を取得する

    カラムの基本データ型取得 SQLサーバーで定義されているテーブルのカ

    SQLServer
    テーブルに設定されているインデックスをSQLで検索する

    テーブルに設定されているインデックスをSQLで検索 SQLSer

    →もっと見る



    PAGE TOP ↑