全トリガー(trigger) を無効化(disable) / 有効化(enable) する
トリガー(trigger) を無効化(disable) / 有効化(enable) するには?
一時的に全トリガー (trigger) を無効化 (disable) したい時があるかもしれません。
そんな時に便利なスクリプトをご紹介します。
あるテーブルの特定のトリガーの無効化(disable) / 有効化(enable)
まずはあるテーブルのあるトリガーを無効化(disable) / 有効化(enable)するスクリプトから見てみましょう。
ALTER TABLE [テーブル名] DISABLE TRIGGER [トリガー名];
ALTER TABLE [テーブル名] ENABLE TRIGGER [トリガー名];
ALTER TABLE [テーブル名] ENABLE TRIGGER [トリガー名];
または
DISABLE TRIGGER [トリガー名] ON [テーブル名];
ENABLE TRIGGER [トリガー名] ON [テーブル名];
ENABLE TRIGGER [トリガー名] ON [テーブル名];
あるテーブルの全てのトリガーの無効化(disable) / 有効化(enable)
次にあるのテーブルの全てのトリガーを無効化(disable) / 有効化(enable)するスクリプトです。
ALTER TABLE [テーブル名] DISABLE TRIGGER ALL;
ALTER TABLE [テーブル名] ENABLE TRIGGER ALL;
ALTER TABLE [テーブル名] ENABLE TRIGGER ALL;
先程と同じ ALTER TABLE を使ってトリガー名の変わりに ALL というキーワードを指定します。
データベースの全トリガーの無効化(disable) / 有効化(enable)
最後にデータベースの全トリガーを無効化(disable) / 有効化(enable)する方法です。
現在一番簡単なのは、ドキュメントされていない sp_MSforeachtable を使って以下のようにスクリプトを実行する方法です。
sp_MSforeachtable "ALTER TABLE ? DISABLE TRIGGER ALL";
sp_MSforeachtable "ALTER TABLE ? ENABLE TRIGGER ALL";
sp_MSforeachtable "ALTER TABLE ? ENABLE TRIGGER ALL";
ただ、sp_MSforeachtable はドキュメントされていないストアードプロシジャーなのでいつどうなるかわかりません。
手動で一時的に全トリガー(trigger) を無効化(disable) / 有効化(enable)する時にのみ使うのが良いと思います。