web-dev-qa-db-fra.com

Comment vérifier si un déclencheur se déclenche sur les instructions INSERT, UPDATE ou DELETE?

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.

11
George.Palacios

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';
12
George.Palacios