データベース内の全トリガー(trigger) や有効化されているトリガーを取得する
データベース内の全トリガー(trigger) を取得するには?
データベース内の全トリガーの一覧を見たり、それらが有効化されているか確認したいような状況、ありますよね。
今回は、そんな時にに使えるスクリプトをご紹介します。
データベース内の全トリガー(trigger) を取得する
データベース内の全トリガーをリストするには、sys.trigger ビューが使えます。
まずはシンプルに sys.trigger ビューを select してみましょう。
このクエリーで取得される結果には DML トリガーだけでなく、DDL トリガーも含まれます。
DMLトリガーとは、テーブルやビューに対して、INSERT、UPDATE、DELETE などのDML (データ操作言語) イベント起こったときに実行されるトリガーです。
DDL トリガーとはDDL (データ定義言語) ステートメントに応じて実行される特殊なトリガーで、主に管理タスクに使用されます。
DMLトリガーのほうが良く使われていて、システム開発時にトリガーと言った時は DML トリガーを指していることが多いと思います。
データベース内の DML トリガー(trigger) と、それらがついているテーブルやビューの情報を取得する
この先は DML トリガーについてのお話です。
この sys.triggers ビューの中の DML トリガーの parent_id は、そのトリガーがついているテーブルやビューの object_id です。
ですので、トリガーが付いているオブジェクトの情報も取得したい時には、sys.objects ビューと join して情報を取得することができます。
O.type_desc AS ObjectType,
TR.name AS TriggerName
FROM sys.triggers AS TR
INNER JOIN sys.objects AS O
ON TR.parent_id = O.object_id;
DDL トリガーはデータベースレベルなので parent_id は 0 になっているため、上記のクエリーの結果には出てきません。
データベース内の有効化されている DML トリガー(trigger) を取得する
トリガーが現在有効化されているかどうかは、sys.trigger ビューの is_disabled カラムの値で判断できます。
ですので、以下のクエリーで、現在選択されているデータベース内の有効化されているトリガー名の一覧が取得できます。
O.type_desc AS ObjectType,
TR.name AS TriggerName
FROM sys.triggers AS TR
INNER JOIN sys.objects AS O
ON TR.parent_id = O.object_id
WHERE TR.is_disabled = 0;