Sql-Server
有沒有辦法可以導出伺服器上所有表觸發器的列表?
我有兩個我管理的 SQL Server 實例。一個是 SQL Server 2000 實例,另一個是 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';