sql >> Databáze >  >> RDS >> Sqlserver

Dotaz, který vrací hierarchický seznam typů událostí spouštění na serveru SQL

Na serveru SQL Server můžete pomocí následujících dotazů T-SQL vrátit hierarchický seznam typů spouštěcích událostí.

Tyto příklady se dotazují na sys.trigger_event_types zobrazení, které vrací řádek pro každou událost nebo skupinu událostí, na které se může spouštěč spustit.

Příklad 1 – Vrátit všechny řádky

Tento dotaz vrátí všechny řádky v sys.trigger_event_types zobrazit.

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;

Tento dotaz vrátí 284 řádků v mém prostředí SQL Server 2017 a 291 řádků v mém prostředí SQL Server 2019.

Příklad 2 – Vrácení jednoho typu události

Předchozí dotaz můžete upravit tak, aby vracel konkrétní typ události uvedený ve stylu drobečkové navigace.

Zde je příklad vrácení CREATE_TABLE typ události ve stylu drobečkové navigace:

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

Výsledek:

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

  1. Jak mohu dešifrovat hash hesla v PHP?

  2. ALTER &DROP Table DDL s okamžitým spuštěním v databázi Oracle

  3. Příběh dvou shluků faktorů

  4. SQL Server – chybí NATURAL JOIN / x JOIN y USING (pole)