/* あとでなおす */

友達募集中

【SQL Server】トリガー一覧取得SQL

SQL Serverでテーブルトリガーの一覧を取得するSQLです。
たまに使うのでメモ。

Management Studioってトリガーを確認しにくいんですよね。


他システムをメンテや障害対応してくれとか言われたときにトリガー誤爆したくないで私はSQL Serverの場合はこのSQLを最初の方に実行します。
トリガーの多さでDBの保守性って大きく変わってきますからね…

SELECT sys_tbl.name AS テーブル名
, sys_trg.name AS トリガー名
, sys_trg_ev.type_desc AS トリガータイプ
, CASE sys_trg.is_disabled WHEN 0 THEN '有効' ELSE '無効' END AS 有効無効
, 'ALTER TABLE ' + sys_tbl.name + ' DISABLE TRIGGER ' + sys_trg.name + ';' AS トリガー無効化SQL
, 'ALTER TABLE ' + sys_tbl.name + ' ENABLE TRIGGER ' + sys_trg.name + ';' AS トリガー有効化SQL
FROM sys.triggers AS sys_trg
INNER JOIN sys.tables AS sys_tbl
ON sys_trg.parent_id = sys_tbl.object_id
INNER JOIN sys.trigger_events AS sys_trg_ev
ON sys_trg.object_id = sys_trg_ev.object_id
;

【説明】
テーブル名とトリガー名は名前通りです。
トリガータイプは更新の種類で INSERT / UPDATE / DELETE のいずれかです。
有効無効も名前通りですがトリガー自体が有効か無効になっているかです。
無効の場合はトリガーが存在しても動きません。
有効無効の切り替えのSQLも最後の2列で取得しています。

※トリガーが1つでも例えばUPDATE兼DELETEトリガーだったりすると2行で表示されますのであしからず。