【SQLServer】トリガーの定義情報を確認する方法
 
      - 
          カテゴリ:
                      
- DB
- 
          タグ:
                      
- #SQLServer
SQLServerでトリガーの定義情報を確認する方法をご紹介します。
最近SQLServerをよく使うようになって、段々と使い方に慣れてきました。
SQLServerでユーザテーブルに限らず、トリガーやプロシージャの詳細情報もすべてテーブルで管理しているっぽい。
そこでよく使われるのが「sys.××」というやつ。すべて確認する際はSELECT文を投げて内容を見る運用なんだなぁと理解しました。
今回はトリガーの詳細情報を確認したく、MySQLの「show create trigger」的なものがないかなぁと調べていらたら、結局「sys.triggers」オブジェクトに対してSELECT文を発行して確認する方法にたどり着きました。
【SQL】
-- トリガー詳細
SELECT 
    O.name AS 'テーブル名'
    , O.type_desc AS 'オブジェクト区分'
    , TR.name AS 'トリガー名'
    , TE.type_desc AS 'トリガー操作'
    , S.definition AS 'クエリ'
FROM sys.triggers TR
INNER JOIN sys.objects O
    ON TR.parent_id = O.object_id
INNER JOIN sys.trigger_events TE
    ON TE.object_id = TR.object_id
INNER JOIN sys.all_sql_modules S 
    ON S.object_id = TR.object_id 
;
/*[補足]
sys.objects:ユーザテーブル、トリガーなどすべてのオブジェクト一覧
sys.triggers:トリガー一覧
sys.trigger_events:トリガーと各オブジェクトの操作(INSERT、UPDATE)
sys.all_sql_modules:ストアドプロシージャやトリガーのクエリ内容
**/
【結果】
※クエリの結果はあくまでサンプルの内容になります。
| テーブル名 | オブジェクト区分 | トリガー名 | トリガー操作 | クエリ | 
|---|---|---|---|---|
| T_SAMPLE1 | USER_TABLE | TRIGGER_T_SAMPLE1_UPDATED | UPDATE | CREATE TRIGGER  TRIGGER_T_SAMPLE1_UPDATED ON T_SAMPLE1 AFTER UPDATE AS … | 
| T_SAMPLE1 | USER_TABLE | TRIGGER_T_SAMPLE1_DELETED | UPDATE | CREATE TRIGGER  TRIGGER_T_SAMPLE1_DELETED ON T_SAMPLE1 AFTER UPDATE AS … | 
| T_SAMPLE1 | USER_TABLE | TRIGGER_T_SAMPLE1_INSERTED | INSERT | CREATE TRIGGER  TRIGGER_T_SAMPLE1_INSERTED ON T_SAMPLE1 AFTER INSERT AS … | 
| T_SAMPLE2 | USER_TABLE | TRIGGER_T_SAMPLE2_UPDATED | UPDATE | CREATE TRIGGER  TRIGGER_T_SAMPLE2_UPDATED ON T_SAMPLE1 AFTER UPDATE AS … | 
| T_SAMPLE2 | USER_TABLE | TRIGGER_T_SAMPLE2_INSERTED | INSERT | CREATE TRIGGER  TRIGGER_T_SAMPLE2_INSERTED ON T_SAMPLE1 AFTER INSERT AS … | 
          投稿日:2019-09-11            
          更新日:2019-09-13      
 
     
         
         
         
        
