有没有办法查看SQL Db中的触发器是否修改了任何列?

时间:2011-06-08 14:53:40

标签: sql database triggers

有没有办法查询Db以查看哪些触发器与我正在处理的DataBase中的dbo.Table1.FooColumn交互?我需要调查哪些触发器可能修改Table1上的“FooColumn”列。

由于

1 个答案:

答案 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)的触发器,则必须手动检查触发器调用的所有存储过程。