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