データベース内の全トリガー(trigger) や有効化されているトリガーを取得する

データベース内の全トリガー(trigger) を取得するには?

データベース内の全トリガーの一覧を見たり、それらが有効化されているか確認したいような状況、ありますよね。

今回は、そんな時にに使えるスクリプトをご紹介します。

データベース内の全トリガー(trigger) を取得する

データベース内の全トリガーをリストするには、sys.trigger ビューが使えます。

まずはシンプルに sys.trigger ビューを select してみましょう。

SELECT * FROM sys.triggers;

クエリーの実行結果1

このクエリーで取得される結果には DML トリガーだけでなく、DDL トリガーも含まれます。

DMLトリガーとは、テーブルやビューに対して、INSERT、UPDATE、DELETE などのDML (データ操作言語) イベント起こったときに実行されるトリガーです。

DDL トリガーとはDDL (データ定義言語) ステートメントに応じて実行される特殊なトリガーで、主に管理タスクに使用されます。

DMLトリガーのほうが良く使われていて、システム開発時にトリガーと言った時は DML トリガーを指していることが多いと思います。

データベース内の DML トリガー(trigger) と、それらがついているテーブルやビューの情報を取得する

この先は DML トリガーについてのお話です。

この sys.triggers ビューの中の DML トリガーの parent_id は、そのトリガーがついているテーブルやビューの object_id です。

ですので、トリガーが付いているオブジェクトの情報も取得したい時には、sys.objects ビューと join して情報を取得することができます。

SELECT   O.name AS ObjectName,
         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 カラムの値で判断できます。

ですので、以下のクエリーで、現在選択されているデータベース内の有効化されているトリガー名の一覧が取得できます。

SELECT   O.name AS ObjectName,
         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;

クエリーの実行結果2

© 2010-2024 SQL Server 入門