Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj sys.trigger_event_types, aby wyświetlić listę typów zdarzeń wyzwalających w SQL Server

W SQL Server możesz użyć sys.trigger_event_types aby zwrócić wszystkie zdarzenia lub grupy zdarzeń, na które może zadziałać wyzwalacz.

Przykład 1 – Mała próbka

Tutaj używam TOP() klauzula zwracająca pierwsze dziesięć wierszy z widoku.

SELECT TOP(10) * 
FROM sys.trigger_event_types;

Wynik:

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

Jeśli wybiorę wszystkie wiersze, otrzymam 284 podczas korzystania z SQL Server 2017 i 291 w SQL Server 2019.

Przykład 2 – Pozyskiwanie rodzica

Jeśli przyjrzysz się uważnie wynikom sys.trigger_event_types , zobaczysz, że zdarzenia wyzwalające DDL są hierarchiczne.

Oto przykład, który pokazuje hierarchię CREATE_TABLE zdarzenie wyzwalające.

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;

Wynik:

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

Widzimy, że DDL_EVENTS znajduje się na szczycie hierarchii, po którym następuje DDL_DATABASE_LEVEL_EVENTS itd., aż dojdziemy do CREATE_TABLE .

Inny sposób na wizualizację tego jest taki:

DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE

Możesz zastąpić CREATE_TABLE w zapytaniu z dowolnym innym typem zdarzenia, aby zobaczyć jego hierarchię.

Zobacz także Zapytanie, które zwraca hierarchiczną listę typów zdarzeń wyzwalających w SQL Server, aby zwrócić hierarchiczną listę typów zdarzeń wyzwalających.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wewnętrzne łączenie trzech stołów

  2. Wydajność serwera SQL TOP IO Query -2

  3. Rozwiązywanie problemów z błędem Microsoft SQL Server 18456

  4. Jak obliczyć wiek (w latach) na podstawie daty urodzenia i getDate()

  5. SQL Server 2016:Utwórz bazę danych