Lister les triggers d’une base de données sous SQL Server 2005 et 2008

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

Une réflexion au sujet de « Lister les triggers d’une base de données sous SQL Server 2005 et 2008 »

Laisser un commentaire