web-dev-qa-db-ja.com

サーバー上のすべてのテーブルトリガーのリストをエクスポートする方法はありますか?

管理しているSQL Serverインスタンスが2つあります。 1つはSQL Server 2000インスタンスで、もう1つは2005年です。

これらのサーバーで、特定の条件下で実行されたいくつかのテーブルトリガーを設定したことを思い出します。これらのトリガーを新しいプロジェクトの参照ポイントとして調べる必要がありますが、私の人生では、それらを見つけることができません。

すべてのデータベースを反復処理し、その後、各テーブルを反復処理し、テーブルに関連付けられているトリガーを出力できる、実行可能な巧妙なSQLステートメントはありますか?

2
RLH

これにより、トリガーを持つテーブルのリストと、関連付けられたトリガーの名前が表示されます。

SELECT t.name, tr.name 
FROM sys.triggers tr
    INNER JOIN sys.tables t ON tr.parent_id = t.object_id

これにより、同じリストが表示され、トリガーステートメントの実際のテキストを示す列が表示されます。

SELECT t.name, tr.name, m.definition 
FROM sys.triggers tr
    INNER JOIN sys.tables t ON tr.parent_id = t.object_id
    INNER JOIN sys.sql_modules m ON tr.object_id = m.object_id

Aaronが示唆したように、これはSQL Server 2005+でも機能します。

SELECT t.name, tr.name, OBJECT_DEFINITION(tr.object_id) AS TriggerText 
FROM sys.triggers tr
    INNER JOIN sys.tables t ON tr.parent_id = t.object_id

そして彼の優れた提案に従って、以下はSQL Server 2000+(SQL Server 2012を含む)で機能します。

SELECT [table] = t.name, 
    [trigger] = tr.name,
    c.text
FROM sysobjects AS t
    INNER JOIN sysobjects AS tr  ON t.id = tr.parent_obj
    INNER JOIN syscomments AS c  ON tr.id = c.id
WHERE tr.xtype = 'TR'
    AND t.xtype = 'U';
4
Max Vernon

SQL Server 2000の場合:

SELECT 
  [table] = t.name, 
  [trigger] = tr.name,
  c.text
FROM sysobjects AS t
INNER JOIN sysobjects AS tr
  ON t.id = tr.parent_obj
INNER JOIN syscomments AS c
  ON tr.id = c.id
WHERE tr.xtype = 'TR'
AND t.xtype = 'U';

マックスはあなたの答えにこれを自由に組み込んでください。

3
Aaron Bertrand