2011-06-08 56 views

回答

2

对于MySQL,Postgres的,或SQL Server,你可以使用INFORMATION_SCHEMA.TRIGGERS

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS 
WHERE EVENT_OBJECT_SCHEMA = 'dbo' 
AND (EVENT_OBJECT_TABLE = 'Table1' OR LCASE(ACTION_STATEMENT) LIKE '%table1%') 
AND LCASE(ACTION_STATEMENT) LIKE '%foocolumn%'; 

Oracle不支持ANSI INFORMATION_SCHEMA,所以你可以改用:

SELECT * FROM DBA_TRIGGERS 
WHERE (TABLE_NAME = 'Table1' OR LCASE(TRIGGER_BODY) LIKE '%table1%') 
AND LCASE(TRIGGER_BODY) LIKE '%foocolumn%'; 

以上查询查找为Table1定义的触发器,并影响FooColumn或为另一个表格定义的触发器e但影响Table1.FooColumn

请注意,如果DBMS支持可调用存储过程(如Oracle)的触发器,则必须手动检查由触发器调用的所有存储过程。

相关问题