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

Query che restituisce un elenco gerarchico di tipi di eventi trigger in SQL Server

In SQL Server puoi utilizzare le seguenti query T-SQL per restituire un elenco gerarchico di tipi di eventi trigger.

Questi esempi interrogano sys.trigger_event_types view, che restituisce una riga per ogni evento o gruppo di eventi su cui può essere attivato un trigger.

Esempio 1 – Restituisci tutte le righe

Questa query restituisce tutte le righe in sys.trigger_event_types visualizza.

WITH event_types(Type, Type_Name, Parent_Type, Level, Sort) AS   
(  
    SELECT 
      tet.type, 
      tet.type_name, 
      tet.parent_type, 
      1 AS Level,
      CONVERT(nvarchar(255), tet.type_name)
    FROM sys.trigger_event_types tet
    WHERE parent_type IS NULL
    UNION ALL  
    SELECT tet.type,
           CONVERT(nvarchar(64), REPLICATE('|    ' , Level) + tet.type_name),
           tet.parent_type,
           Level + 1,
           CONVERT(nvarchar(255), RTRIM(Sort) + ' > ' + tet.type_name)
    FROM sys.trigger_event_types AS tet
        INNER JOIN event_types AS et
        ON et.type = tet.parent_type
)  
SELECT Type_Name
FROM event_types
ORDER BY Sort;

Quella query restituisce 284 righe nel mio ambiente SQL Server 2017 e 291 righe nel mio ambiente SQL Server 2019.

Esempio 2:restituire un tipo di evento singolo

Puoi modificare la query precedente in modo che restituisca un tipo di evento specifico, elencato in stile breadcrumb.

Ecco un esempio di restituzione di CREATE_TABLE tipo di evento in stile breadcrumb:

WITH event_types(Type, Type_Name, Parent_Type, Level, Sort) AS   
(  
    SELECT 
      tet.type, 
      tet.type_name, 
      tet.parent_type, 
      1 AS Level,
      CONVERT(nvarchar(255), tet.type_name)
    FROM sys.trigger_event_types tet
    WHERE parent_type IS NULL
    UNION ALL  
    SELECT tet.type,
           CONVERT(nvarchar(64), REPLICATE('|    ' , Level) + tet.type_name),
           tet.parent_type,
           Level + 1,
           CONVERT(nvarchar(255), RTRIM(Sort) + ' > ' + tet.type_name)
    FROM sys.trigger_event_types AS tet
        INNER JOIN event_types AS et
        ON et.type = tet.parent_type
)  
SELECT Sort AS [Result]
FROM event_types
WHERE RIGHT(Sort, 12) = 'CREATE_TABLE';

Risultato:

+--------------------------------------------------------------------------------------------------+
| Result                                                                                           |
|--------------------------------------------------------------------------------------------------|
| DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE |
+--------------------------------------------------------------------------------------------------+