确定表是不是受任何触发器影响

Posted

技术标签:

【中文标题】确定表是不是受任何触发器影响【英文标题】:Determine if a table is affected by any trigger确定表是否受任何触发器影响 【发布时间】:2011-09-21 10:47:23 【问题描述】:

有没有办法确定任何给定表上的触发器是否影响另一个特定表?

我的实际问题是从表中删除行,我相信它是从另一个表上的触发器中发生的。我需要找到这个“其他表”(有几百个表)。

提前谢谢!

问候 /Snedker

【问题讨论】:

请说明 RDBMS 和版本。 对不起 - 这是 MSSQL 2008 R2,所以你的其他帖子对我来说很顺利!问候 /Snedker 【参考方案1】:

你可以使用

SELECT def,
        t.*
FROM sys.triggers t
CROSS APPLY (SELECT OBJECT_DEFINITION(object_id)) C(def)
WHERE def LIKE '%DELETE%' AND def LIKE '%your_table%'

如果没有找到任何内容,并且您想扩大可以使用的搜索范围

SELECT *
FROM sys.sql_modules
WHERE definition LIKE '%DELETE%' AND definition LIKE '%your_table%' 

如果这仍然不起作用,并且您认为查询可能是由应用程序发送的,您可以按照my answer here 使用扩展事件来查明真相。

【讨论】:

非常感谢 - 正是我想要的!

以上是关于确定表是不是受任何触发器影响的主要内容,如果未能解决你的问题,请参考以下文章

合并多个 Oracle 触发器。任何性能影响?

如何在新表中插入受影响的行

Ms Sql插入触发器以影响其他表

创建触发器以在更新表之后插入

ORACLE触发器

确定触发器函数内的更新是不是导致另一个触发器触发