管理しているSQL Serverインスタンスが2つあります。 1つはSQL Server 2000インスタンスで、もう1つは2005年です。
これらのサーバーで、特定の条件下で実行されたいくつかのテーブルトリガーを設定したことを思い出します。これらのトリガーを新しいプロジェクトの参照ポイントとして調べる必要がありますが、私の人生では、それらを見つけることができません。
すべてのデータベースを反復処理し、その後、各テーブルを反復処理し、テーブルに関連付けられているトリガーを出力できる、実行可能な巧妙なSQLステートメントはありますか?
これにより、トリガーを持つテーブルのリストと、関連付けられたトリガーの名前が表示されます。
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';
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';
マックスはあなたの答えにこれを自由に組み込んでください。