sql >> Databasteknik >  >> RDS >> Sqlserver

Använd sys.trigger_event_types för att lista triggerhändelsetyper i SQL Server

I SQL Server kan du använda sys.trigger_event_types för att returnera alla händelser eller händelsegrupper som en utlösare kan aktiveras på.

Exempel 1 – Ett litet prov

Här använder jag TOP() sats för att returnera de första tio raderna från vyn.

VÄLJ TOP(10) * FRÅN sys.trigger_event_types;

Resultat:

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

Om jag väljer alla rader får jag 284 när jag använder SQL Server 2017 och 291 i SQL Server 2019.

Exempel 2 – Skaffa föräldern

Om du tittar noga på resultaten av sys.trigger_event_types , ser du att DDL-utlösarhändelser är hierarkiska.

Här är ett exempel som visar hierarkin för CREATE_TABLE utlösa händelse.

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_parent_name, tet.type_name, tet. , et.level + 1 AS-nivå FROM event_types AS et JOIN sys.trigger_event_types AS tet ON et.parent_type =tet.type)SELECT Typ, Type_name, Parent_TypeFROM event_typesORDER BY level DESC;

Resultat:

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

Vi kan se att DDL_EVENTS är överst i hierarkin, följt av DDL_DATABASE_LEVEL_EVENTS , etc, tills vi når CREATE_TABLE .

Ett annat sätt att visualisera det är så här:

DDL_EVENTS> DDL_DATABASE_LEVEL_EVENTS> DDL_TABLE_VIEW_EVENTS> DDL_TABLE_EVENTS> CREATE_TABLE

Du kan ersätta CREATE_TABLE i frågan med någon annan händelsetyp för att se dess hierarki.

Se även Fråga som returnerar en hierarkisk lista över triggerhändelsetyper i SQL Server för att returnera en hierarkisk lista över triggerhändelsetyper.


  1. Hantera den samtidiga förfrågan medan du kvarstår i Oracle-databasen?

  2. Använda MySQL relationsdatabaser på Fedora 20

  3. Hur kan jag matcha de två sista orden i en mening i PostgreSQL?

  4. SQL-anslutningsfråga