it-swarm.com.de

Wie kann überprüft werden, ob bei INSERT-, UPDATE- oder DELETE-Anweisungen ein Trigger ausgelöst wird?

Wie bestimme ich, ob ein Trigger auf INSERT-, UPDATE- oder DELETE-Anweisungen abzielt?

Ich habe eingecheckt sys.triggers und ich kann nichts darüber sehen, auf welche Operation der Trigger ausgelöst wird.

11
George.Palacios

Die Tabelle sys.triggers Macht diese Daten nicht verfügbar, stattdessen haben wir zwei Möglichkeiten:


[~ # ~] Objekt-Eigenschaft [~ # ~]

Mit der Metadatenfunktion OBJECTPROPERTY können wir die Aktion wie folgt als Eigenschaft zurückgeben:

OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger')
OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger')
OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger')

Dies gibt einen einfachen Bitwert zurück, der angibt, ob der Trigger bei dieser bestimmten Aktion ausgelöst wird.


sys.trigger_events

Gemäß die Dokumente enthält dies eine Zeile pro Ereignis, für die ein Trigger ausgelöst wird. Insbesondere sind die Spalten, an denen wir interessiert sind, type und type_desc.

type ist ein Fremdschlüssel für die Tabelle sys.trigger_event_types - type_desc scheint die Spalte type_name aus der Tabelle sys.trigger_event_types zu enthalten.

Diese Daten können mit dem folgenden Skript zurückgegeben werden:

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