Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie sys.trigger_event_types, um Auslöserereignistypen in SQL Server aufzulisten

In SQL Server können Sie sys.trigger_event_types verwenden um alle Ereignisse oder Ereignisgruppen zurückzugeben, bei denen ein Trigger ausgelöst werden kann.

Beispiel 1 – Eine kleine Stichprobe

Hier verwende ich den TOP() -Klausel, um die ersten zehn Zeilen aus der Ansicht zurückzugeben.

SELECT TOP(10) * FROM sys.trigger_event_types;

Ergebnis:

+--------+-------------------+---------------+| Typ | Typname | parent_type ||--------+------------------+---------------|| 21 | CREATE_TABLE | 10018 || 22 | ALTER_TABLE | 10018 || 23 | DROP_TABLE | 10018 || 24 | CREATE_INDEX | 10020 || 25 | ALTER_INDEX | 10020 || 26 | DROP_INDEX | 10020 || 27 | CREATE_STATISTICS | 10021 || 28 | UPDATE_STATISTIK | 10021 || 29 | DROP_STATISTICS | 10021 || 34 | CREATE_SYNONYM | 10022 |+--------+-------------------+---------------+ 

Wenn ich alle Zeilen auswähle, erhalte ich 284 bei Verwendung von SQL Server 2017 und 291 in SQL Server 2019.

Beispiel 2 – Den Elternteil bekommen

Wenn Sie sich die Ergebnisse von sys.trigger_event_types genau ansehen , sehen Sie, dass DDL-Trigger-Ereignisse hierarchisch sind.

Hier ist ein Beispiel, das die Hierarchie von CREATE_TABLE zeigt Ereignis auslösen.

WITH event_types(Type, Type_Name, Parent_Type, Level) AS ( SELECT type, type_name, parent_type, 1 AS level FROM sys.trigger_event_types WHERE type_name ='CREATE_TABLE' UNION ALL SELECT tet.type, tet.type_name, tet.parent_type , et.level + 1 AS level FROM event_types AS et JOIN sys.trigger_event_types AS tet ON et.parent_type =tet.type)SELECT Type, Type_name, Parent_TypeFROM event_typesORDER BY level DESC;

Ergebnis:

+--------+---------------------+--------- ------+| Geben Sie | ein Typname | Parent_Type ||--------+------------------------------------+---------- -----|| 10001 | DDL_EREIGNISSE | NULL || 10016 | DDL_DATABASE_LEVEL_EVENTS | 10001 || 10017 | DDL_TABLE_VIEW_EVENTS | 10016 || 10018 | DDL_TABLE_EVENTS | 10017 || 21 | CREATE_TABLE | 10018 |+--------+----------------------+---------- -----+

Wir können diese DDL_EVENTS sehen steht ganz oben in der Hierarchie, gefolgt von DDL_DATABASE_LEVEL_EVENTS usw., bis wir CREATE_TABLE erreichen .

Eine andere Möglichkeit, es zu visualisieren, ist wie folgt:

DDL_EVENTS> DDL_DATABASE_LEVEL_EVENTS> DDL_TABLE_VIEW_EVENTS> DDL_TABLE_EVENTS> CREATE_TABLE

Sie können CREATE_TABLE ersetzen in der Abfrage mit jedem anderen Ereignistyp, um seine Hierarchie anzuzeigen.

Siehe auch Abfrage, die eine hierarchische Liste von Auslöserereignistypen in SQL Server zurückgibt, um eine hierarchische Liste von Auslöserereignistypen zurückzugeben.