Comment déterminer si un déclencheur cible des instructions INSERT, UPDATE ou DELETE?
Je me suis enregistré sys.triggers
et je ne vois rien concernant l'opération sur laquelle le déclencheur se déclenche.
Le sys.triggers
table n'expose pas ces données, mais nous avons deux options:
[~ # ~] propriété d'objet [~ # ~]
En utilisant la fonction de métadonnées OBJECTPROPERTY , nous pouvons retourner l'action comme une propriété comme ci-dessous:
OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger')
OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger')
OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger')
Cela renverra une valeur de bit simple indiquant si le déclencheur se déclenche sur cette action particulière.
sys.trigger_events
Selon la documentation cela contient une ligne par événement pour laquelle un déclencheur se déclenche. Plus précisément, les colonnes qui nous intéressent sont type
et type_desc
.
type
est une clé étrangère du sys.trigger_event_types
table - type_desc
semble contenir le type_name
colonne du sys.trigger_event_types
table.
Ces données peuvent être renvoyées à l'aide du script suivant:
SELECT
[o].[name]
,[t].[type_desc]
FROM
[sys].[trigger_events] AS [t]
INNER JOIN [sys].[objects] AS [o] ON
[o].[object_id] = [t].[object_id]
WHERE
[o].[name] = 'TriggerNameHere';