有没有办法查询Db以查看哪些触发器与我正在处理的DataBase中的dbo.Table1.FooColumn交互?我需要调查哪些触发器可能修改Table1上的“FooColumn”列。
由于
答案 0 :(得分: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
或为另一个表定义但影响Table1.FooColumn
的触发器。
请注意,如果DBMS支持可以调用存储过程(如Oracle)的触发器,则必须手动检查触发器调用的所有存储过程。