Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête qui renvoie une liste hiérarchique des types d'événements déclencheurs dans SQL Server

Dans SQL Server, vous pouvez utiliser les requêtes T-SQL suivantes pour renvoyer une liste hiérarchique des types d'événements déclencheurs.

Ces exemples interrogent les sys.trigger_event_types view, qui renvoie une ligne pour chaque événement ou groupe d'événements sur lequel un déclencheur peut se déclencher.

Exemple 1 – Renvoyer toutes les lignes

Cette requête renvoie toutes les lignes du sys.trigger_event_types vue.

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;

Cette requête renvoie 284 lignes dans mon environnement SQL Server 2017 et 291 lignes dans mon environnement SQL Server 2019.

Exemple 2 – Renvoyer un seul type d'événement

Vous pouvez modifier la requête précédente afin qu'elle renvoie un type d'événement spécifique, répertorié dans le style fil d'Ariane.

Voici un exemple de renvoi du CREATE_TABLE type d'événement en style fil d'Ariane :

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

Résultat :

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