Publié le : 13/08/2025
Comment identifier les triggers qui mettent à jour une table SQL Server

Objectif** : vous donner une méthode fiable pour retrouver tous les déclencheurs (triggers) susceptibles de modifier une table donnée (ex.
tb_xxx).
Exclusion volontaire : la DMVsys.dm_sql_referencing_entities(Point 3) est écartée ici, car elle retourne des résultats incomplets dans de nombreux scénarios (objets anciens, SQL dynamique, bases migrées, etc.).
1. Pourquoi traquer les triggers ?
- Débogage & performance : un trigger « caché » peut ralentir vos
INSERT/UPDATE/DELETEsans que vous le sachiez. - Maintenance & refonte : avant toute évolution de schéma (ex. refactorisation de tables), il faut connaître les objets dépendants.
- Conformité & audit : certaines normes (SOX, ISO 27001, PCI‑DSS) exigent l’inventaire complet des mécanismes de mise à jour automatique.
2. Méthode 1 : lister les triggers attachés directement à la table
SELECT
tr.name AS TriggerName,
s.name + '.' + t.name AS TableName,
tr.is_disabled AS IsDisabled,
tr.is_instead_of_trigger AS IsInsteadOf
FROM sys.triggers AS tr
JOIN sys.tables AS t ON t.object_id = tr.parent_id
JOIN sys.schemas AS s ON s.schema_id = t.schema_id
WHERE tr.parent_id = OBJECT_ID('dbo.tb_xxx'); -- ajustez le schéma si besoin
Points clés
- Ne retourne que les triggers
AFTERouINSTEAD OFdéfinis surtb_xxx. - Le champ
is_disabledindique si le trigger est actuellement désactivé.
3. Méthode 2 : repérer les triggers externes via recherche plein‑texte
Si d’autres tables possèdent des triggers qui mettent à jour tb_xxx, ils ne seront pas listés par la méthode 1.
La technique la plus simple est de scanner le texte SQL des triggers :
SELECT
tr.name AS TriggerName,
s.name + '.' + t.name AS ParentTable,
tr.is_disabled AS IsDisabled,
sm.definition AS TriggerDefinition
FROM sys.triggers AS tr
JOIN sys.sql_modules AS sm ON sm.object_id = tr.object_id
JOIN sys.tables AS t ON t.object_id = tr.parent_id
JOIN sys.schemas AS s ON s.schema_id = t.schema_id
WHERE sm.definition LIKE '%tb_xxx%'; -- ou COLLATE Latin1_General_CI_AI si besoin
Avantage : universel, rapide, couvre même le SQL dynamique.
Limite : peut remonter de faux positifs si une autre table contient un nom ressemblant àtb_xxx.
4. Méthode 3 : vue de dépendances cataloguées (plus robuste, mais pas infaillible)
SELECT
OBJECT_SCHEMA_NAME(o.object_id) + '.' + o.name AS TriggerName,
OBJECT_SCHEMA_NAME(o.parent_object_id) + '.' + OBJECT_NAME(o.parent_object_id) AS ParentTable
FROM sys.objects AS o
JOIN sys.sql_expression_dependencies AS d ON o.object_id = d.referencing_id
WHERE o.type = 'TR' -- uniquement les triggers
AND d.referenced_id = OBJECT_ID('dbo.tb_xxx');
Points clés
- SQL Server enregistre les dépendances à chaque création ou recompilation d’objet.
- Pas de détection si le trigger utilise du SQL dynamique ou si la base a été montée depuis un
baktrès ancien sans recompilation. - Combinez toujours avec la méthode 2 pour être exhaustif.
5. Méthode 4 : interface graphique SSMS (rapide pour un contrôle visuel)
- Object Explorer : clic droit sur votre base → View → Object Explorer Details (
F7). - Recherchez
tb_xxxdans la zone de recherche. - Dans le panneau de détails, la colonne Referenced By liste les objets dépendants (incluant les triggers).
- Double‑clic sur un trigger ouvre le code pour inspection rapide.
Astuce : activez l’option Track Changes dans SSMS pour surligner immédiatement le mot‑clé
tb_xxxdans le code ouvert.
6. Audit en temps réel (optionnel)
Même après inventaire, il est prudent de vérifier ce qui s’exécute réellement en production :
| Outil | Filtre conseillé | Commentaires |
|---|---|---|
| Extended Events | sql_statement_completed + condition LIKE '%tb_xxx%' | Léger, scriptable, idéal pour prod |
| SQL Profiler | Idem, mais consommation CPU plus élevée | À utiliser sur environnements de test |
| sp_WhoIsActive | surveille les requêtes longues | Permet de repérer un trigger bloquant |
7. Checklist rapide
| Question | Requête / action |
|---|---|
Quels triggers sont sur tb_xxx ? | Méthode 1 |
Quels triggers touchent tb_xxx ? | Méthode 2 + Méthode 3 |
| Vérification visuelle | Méthode 4 |
| Analyse live (performance) | Audit en temps réel |
8. Conclusion
Identifier l’ensemble des triggers susceptibles de modifier une table est indispensable pour :
- Stabiliser les performances (éviter des déclencheurs coûteux non documentés).
- Sécuriser les migrations et refontes de schéma.
- Répondre aux exigences d’audit et de conformité.
En combinant :
- La liste des triggers attachés (
sys.triggers), - Le scan plein‑texte du code (
sys.sql_modules), - Les dépendances cataloguées (
sys.sql_expression_dependencies), - Le contrôle visuel dans SSMS,
…vous obtenez une vue exhaustive, fiable et directement exploitable pour vos chantiers de maintenance ou d’optimisation. À intégrer sans tarder dans vos bonnes pratiques DBA !


















