Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta que retorna uma lista hierárquica de tipos de eventos de gatilho no SQL Server


No SQL Server, você pode usar as seguintes consultas T-SQL para retornar uma lista hierárquica de tipos de eventos de gatilho.

Esses exemplos consultam os sys.trigger_event_types view, que retorna uma linha para cada evento ou grupo de eventos no qual um gatilho pode ser acionado.


Exemplo 1 – Retornar todas as linhas


Esta consulta retorna todas as linhas no sys.trigger_event_types visualizar.
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;

Essa consulta retorna 284 linhas em meu ambiente SQL Server 2017 e 291 linhas em meu ambiente SQL Server 2019.

Exemplo 2 – Retornar um único tipo de evento


Você pode modificar a consulta anterior para que ela retorne um tipo de evento específico, listado no estilo breadcrumb.

Aqui está um exemplo de como retornar o CREATE_TABLE tipo de evento no estilo 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';

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