Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn trả về danh sách phân cấp các loại sự kiện kích hoạt trong SQL Server

Trong SQL Server, bạn có thể sử dụng các truy vấn T-SQL sau để trả về danh sách phân cấp các loại sự kiện trình kích hoạt.

Các ví dụ này truy vấn sys.trigger_event_types chế độ xem, trả về một hàng cho mỗi sự kiện hoặc nhóm sự kiện mà trình kích hoạt có thể kích hoạt.

Ví dụ 1 - Trả lại tất cả các hàng

Truy vấn này trả về tất cả các hàng trong sys.trigger_event_types xem.

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;

Truy vấn đó trả về 284 hàng trong môi trường SQL Server 2017 và 291 hàng trong môi trường SQL Server 2019 của tôi.

Ví dụ 2 - Trả về một loại sự kiện duy nhất

Bạn có thể sửa đổi truy vấn trước đó để nó trả về một loại sự kiện cụ thể, được liệt kê trong kiểu breadcrumb.

Đây là ví dụ về việc trả lại CREATE_TABLE loại sự kiện trong kiểu breadcrumb:

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

Kết quả:

+--------------------------------------------------------------------------------------------------+
| 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. Làm thế nào để thả cột với ràng buộc?

  2. Cách chỉ định đối chiếu trong truy vấn trong SQL Server (T-SQL)

  3. Hợp nhất các giá trị hàng thành CSV (còn gọi là GROUP_CONCAT cho SQL Server)

  4. Kiểm tra tệp có tồn tại hay không trong máy chủ sql?

  5. Cài đặt cụm chuyển đổi dự phòng SQL Server -2