Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявка, която връща йерархичен списък с типове тригерни събития в SQL Server

В SQL Server можете да използвате следните T-SQL заявки, за да върнете йерархичен списък с типове задействащи събития.

Тези примери правят заявка за sys.trigger_event_types изглед, който връща ред за всяко събитие или група събития, за които може да се задейства тригер.

Пример 1 – Връщане на всички редове

Тази заявка връща всички редове в sys.trigger_event_types изглед.

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;

Тази заявка връща 284 реда в моята среда на SQL Server 2017 и 291 реда в моята среда на SQL Server 2019.

Пример 2 – Връщане на единичен тип събитие

Можете да модифицирате предишната заявка, така че да връща конкретен тип събитие, изброено в стил на галерия.

Ето пример за връщане на CREATE_TABLE тип събитие в стил на галета:

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 6 начина за проверка на размера на база данни в SQL Server с помощта на T-SQL

  2. CURRENT_TIMESTAMP Примери в SQL Server (T-SQL)

  3. Използване на GO в рамките на транзакция

  4. Как да преименувате база данни в SQL Server - SQL Server / TSQL урок, част 26

  5. SQL NOT IN не работи