sql >> Database >  >> RDS >> Sqlserver

Gebruik sys.trigger_event_types om triggergebeurtenistypen in SQL Server weer te geven

In SQL Server kunt u sys.trigger_event_types . gebruiken om alle gebeurtenissen of gebeurtenisgroepen terug te geven waarop een trigger kan worden geactiveerd.

Voorbeeld 1 – Een kleine steekproef

Hier gebruik ik de TOP() clausule om de eerste tien rijen uit de weergave te retourneren.

SELECT TOP(10) * 
FROM sys.trigger_event_types;

Resultaat:

+--------+-------------------+---------------+
| type   | type_name         | 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_STATISTICS | 10021         |
| 29     | DROP_STATISTICS   | 10021         |
| 34     | CREATE_SYNONYM    | 10022         |
+--------+-------------------+---------------+

Als ik alle rijen selecteer, krijg ik 284 bij gebruik van SQL Server 2017 en 291 in SQL Server 2019.

Voorbeeld 2 – De ouder krijgen

Als je goed kijkt naar de resultaten van sys.trigger_event_types , zult u zien dat DDL-triggergebeurtenissen hiërarchisch zijn.

Hier is een voorbeeld dat de hiërarchie toont van de CREATE_TABLE triggergebeurtenis.

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_Type
FROM event_types
ORDER BY level DESC;

Resultaat:

+--------+---------------------------+---------------+
| Type   | Type_name                 | Parent_Type   |
|--------+---------------------------+---------------|
| 10001  | DDL_EVENTS                | NULL          |
| 10016  | DDL_DATABASE_LEVEL_EVENTS | 10001         |
| 10017  | DDL_TABLE_VIEW_EVENTS     | 10016         |
| 10018  | DDL_TABLE_EVENTS          | 10017         |
| 21     | CREATE_TABLE              | 10018         |
+--------+---------------------------+---------------+

We kunnen zien dat DDL_EVENTS staat bovenaan de hiërarchie, gevolgd door DDL_DATABASE_LEVEL_EVENTS , etc, totdat we CREATE_TABLE . bereiken .

Een andere manier om het te visualiseren is als volgt:

DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE

U kunt CREATE_TABLE . vervangen in de query met een ander gebeurtenistype om de hiërarchie ervan te zien.

Zie ook Query die een hiërarchische lijst met typen triggergebeurtenissen retourneert in SQL Server om een ​​hiërarchische lijst met typen triggergebeurtenissen te retourneren.


  1. De geparametriseerde query ..... verwacht de parameter '@units', die niet is opgegeven

  2. Wat is een aangepaste runtime-afbeelding in Java 9?

  3. Welke versie van PostgreSQL gebruik ik?

  4. Alles selecteren voor/na een bepaald teken in MySQL - SUBSTRING_INDEX()