Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abfrage, die eine hierarchische Liste von Auslöserereignistypen in SQL Server zurückgibt

In SQL Server können Sie die folgenden T-SQL-Abfragen verwenden, um eine hierarchische Liste von Auslöserereignistypen zurückzugeben.

Diese Beispiele fragen die sys.trigger_event_types ab view, die eine Zeile für jedes Ereignis oder jede Ereignisgruppe zurückgibt, für die ein Trigger ausgelöst werden kann.

Beispiel 1 – Alle Zeilen zurückgeben

Diese Abfrage gibt alle Zeilen in sys.trigger_event_types zurück ansehen.

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;

Diese Abfrage gibt 284 Zeilen in meiner SQL Server 2017-Umgebung und 291 Zeilen in meiner SQL Server 2019-Umgebung zurück.

Beispiel 2 – Einen einzelnen Ereignistyp zurückgeben

Sie können die vorherige Abfrage so ändern, dass sie einen bestimmten Ereignistyp zurückgibt, der im Breadcrumb-Stil aufgelistet ist.

Hier ist ein Beispiel für die Rückgabe von CREATE_TABLE Ereignistyp im Breadcrumb-Stil:

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

Ergebnis:

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