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

Use sys.trigger_event_types para enumerar los tipos de eventos desencadenantes en SQL Server

En SQL Server, puede usar sys.trigger_event_types para devolver todos los eventos o grupos de eventos en los que se puede disparar un disparador.

Ejemplo 1:una pequeña muestra

Aquí, uso el TOP() cláusula para devolver las primeras diez filas de la vista.

SELECT TOP(10) * 
FROM sys.trigger_event_types;

Resultado:

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

Si selecciono todas las filas, obtengo 284 cuando uso SQL Server 2017 y 291 en SQL Server 2019.

Ejemplo 2:Obtener el padre

Si observa detenidamente los resultados de sys.trigger_event_types , verá que los eventos de activación de DDL son jerárquicos.

Aquí hay un ejemplo que muestra la jerarquía de CREATE_TABLE desencadenar evento.

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;

Resultado:

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

Podemos ver que DDL_EVENTS está en la parte superior de la jerarquía, seguido de DDL_DATABASE_LEVEL_EVENTS , etc, hasta llegar a CREATE_TABLE .

Otra forma de visualizarlo es así:

DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE

Puede reemplazar CREATE_TABLE en la consulta con cualquier otro tipo de evento para ver su jerarquía.

Consulte también Consulta que devuelve una lista jerárquica de tipos de eventos de activación en SQL Server para obtener una lista jerárquica de tipos de eventos de activación.