Sql-Server

有沒有辦法可以導出伺服器上所有表觸發器的列表?

  • March 7, 2013

我有兩個我管理的 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';

引用自:https://dba.stackexchange.com/questions/36212