masalibの日記

システム開発、運用と猫の写真ブログです

SQLServerのトリガーの一覧を取得する方法

## 経緯

トリガーを作ったのですが
メンテナンスする事が発生しました


masalib.hatenablog.com


その時に、一覧を取得したり
現在の状況を取得したりする事をしました


## 有効なトリガーの一覧を取得するSQL

```sql
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;
```

現在、選択しているDBのトリガー一覧が取得されます



## 登録されているトリガーの内容を取得するSQL

```sql
SELECT sys.triggers.name ,sys.sql_modules.definition
FROM sys.triggers
INNER JOIN sys.objects
ON sys.objects.object_id = sys.triggers.object_id
INNER JOIN sys.schemas
ON sys.schemas.schema_id = sys.objects.schema_id
INNER JOIN sys.sql_modules
ON sys.sql_modules.object_id = sys.objects.object_id

    • WHERE sys.triggers.name = 'トリガー名を指定' --指定しない場合は全件取得

ORDER BY sys.triggers.name
```


## 注意点

SQLServerManagementStudioはデフォルトで256文字までしか出力しません

f:id:masalib:20160216214322j:plain

クエリーのオプションで

f:id:masalib:20160216214342j:plain

256 → 8000**

に修正してから実行してください

なぜか改行が消えるので・・・一つ一つ出力で対応しました
スクリプトウィザードなどでも出力できると思う


## もっと楽な方法を見つけた
もっと簡単にスクリプトウィザードで出力できた
masalib.hatenablog.com


## 参考URL

http://sql55.com/query/list-all-triggers.php
http://www.projectgroup.info/tips/SQLServer/SQL/SQL000011.html