sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta que devuelve una lista jerárquica de tipos de eventos desencadenantes en SQL Server

En SQL Server, puede usar las siguientes consultas T-SQL para obtener una lista jerárquica de tipos de eventos desencadenantes.

Estos ejemplos consultan el sys.trigger_event_types vista, que devuelve una fila para cada evento o grupo de eventos en el que se puede activar un disparador.

Ejemplo 1:devolver todas las filas

Esta consulta devuelve todas las filas en sys.trigger_event_types ver.

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;

Esa consulta devuelve 284 filas en mi entorno de SQL Server 2017 y 291 filas en mi entorno de SQL Server 2019.

Ejemplo 2:devolver un solo tipo de evento

Puede modificar la consulta anterior para que devuelva un tipo de evento específico, enumerado en estilo de ruta de navegación.

Aquí hay un ejemplo de cómo devolver CREATE_TABLE tipo de evento en estilo de ruta de navegación:

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';

Resultado:

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