Voici un petit snippet pour trouver la liste de tous les triggers d’une base de données, ainsi que le type d’événement qui entraîne leur exécution …
Si nous voulons lister les triggers DML (qui sont déclenchés suite à l’occurrence d’une instruction INSERT, UPDATE, ou DELETE) de la base de données en cours, nous pouvons exécuter :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | --------------------------------- -- Nicolas SOUQUET - 21/09/2009 - --------------------------------- SELECT TR.name AS nomTrigger, T.name AS nomTable, TR.is_disabled AS estActif, CASE TR.is_instead_of_trigger WHEN 1 THEN 'INSTEAD OF' ELSE 'AFTER' END AS typeDeclenchement, TRE.type_desc AS DMLDeclencheur, TRE.is_first AS estPremier, TRE.is_last AS estDernier FROM sys.triggers AS TR JOIN sys.tables AS T ON TR.parent_id = T.object_id JOIN sys.trigger_events AS TRE ON TR.object_id = TRE.object_id --WHERE T.name = 'maTable' ORDER BY T.name, TR.name |
La seule jointure avec sys.tables suffit a éliminer les triggers de base de données ou de connexion.
Si nous souhaitons lister les triggers de base de données pour la base de données en cours, il suffit d’écrire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | --------------------------------- -- Nicolas SOUQUET - 21/09/2009 - --------------------------------- SELECT TR.name, TR.is_disabled AS estActif, CASE TR.is_instead_of_trigger WHEN 1 THEN 'INSTEAD OF' ELSE 'AFTER' END AS typeDeclenchement, TRE.type_desc AS DDLDeclencheur, TRE.is_first AS estPremier, TRE.is_last AS estDernier FROM sys.triggers AS TR JOIN sys.trigger_events AS TRE ON TR.object_id = TRE.object_id WHERE parent_id = 0 |
Enfin, si l’on souhaite lister les triggers de connexion :
1 2 3 4 5 6 7 8 9 10 | --------------------------------- -- Nicolas SOUQUET - 21/09/2009 - --------------------------------- SELECT ST.name AS nomTriggerConnexion, ST.is_disabled AS estActif, STE.type_desc AS typeDeclenchement, STE.event_group_type_desc AS groupeEvenement FROM sys.server_triggers AS ST JOIN sys.server_trigger_events AS STE ON ST.object_id = STE.object_id |
ElSuket
Hello,
Juste pour signaler un mauvais nommage de colonne. La deuxième colonne de la clause SELECT devrait se nommée estInactif au lieu de estActif