Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare sys.trigger_event_types per elencare i tipi di eventi trigger in SQL Server

In SQL Server puoi usare sys.trigger_event_types per restituire tutti gli eventi o i gruppi di eventi su cui può essere attivato un trigger.

Esempio 1:un piccolo campione

Qui, uso il TOP() clausola per restituire le prime dieci righe dalla vista.

SELECT TOP(10) * 
FROM sys.trigger_event_types;

Risultato:

+--------+-------------------+---------------+
| 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         |
+--------+-------------------+---------------+

Se seleziono tutte le righe, ottengo 284 quando utilizzo SQL Server 2017 e 291 in SQL Server 2019.

Esempio 2 – Ottenere il genitore

Se guardi da vicino i risultati di sys.trigger_event_types , vedrai che gli eventi di attivazione DDL sono gerarchici.

Ecco un esempio che mostra la gerarchia del CREATE_TABLE evento di attivazione.

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;

Risultato:

+--------+---------------------------+---------------+
| 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         |
+--------+---------------------------+---------------+

Possiamo vedere che DDL_EVENTS è in cima alla gerarchia, seguito da DDL_DATABASE_LEVEL_EVENTS , ecc, fino a raggiungere CREATE_TABLE .

Un altro modo per visualizzarlo è questo:

DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE

Puoi sostituire CREATE_TABLE nella query con qualsiasi altro tipo di evento per vederne la gerarchia.

Vedere anche Query che restituisce un elenco gerarchico di tipi di eventi trigger in SQL Server per restituire un elenco gerarchico di tipi di eventi trigger.