0
有没有办法查询Db,看看我正在处理的DataBase中的哪些触发器与dbo.Table1.FooColumn进行交互?我需要调查哪些触发器可能会修改Table1上的“FooColumn”列。有没有办法查看是否有任何列由SQL Db中的触发器修改?
感谢
有没有办法查询Db,看看我正在处理的DataBase中的哪些触发器与dbo.Table1.FooColumn进行交互?我需要调查哪些触发器可能会修改Table1上的“FooColumn”列。有没有办法查看是否有任何列由SQL Db中的触发器修改?
感谢
对于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)的触发器,则必须手动检查由触发器调用的所有存储过程。
您正在使用哪些DBMS? – 2011-06-08 15:33:15