Trong SQL Server, bạn có thể sử dụng sys.trigger_event_types
để trả về tất cả các 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 - Một mẫu nhỏ
Ở đây, tôi sử dụng TOP()
mệnh đề để trả về mười hàng đầu tiên từ chế độ xem.
CHỌN HÀNG ĐẦU (10) * TỪ sys.trigger_event_types;
Kết quả:
+ -------- + ------------------- + --------------- + | loại | type_name | parent_type || -------- + ------------------- + --------------- || 21 | CREATE_TABLE | 10018 || 22 | ALTER_TABLE | 10018 || 23 | DROP_TABLE | 10018 || 24 | CREATE_INDEX | 10020 || 25 | ALTER_INDEX | 10020 || 26 | DROP_INDEX | 10020 || 27 | CREATE_STATISTICS | 10021 || 28 | UPDATE_STATISTICS | 10021 || 29 | DROP_STATISTICS | 10021 || 34 | CREATE_SYNONYM | 10022 | + -------- + ------------------- + --------------- +Nếu tôi chọn tất cả các hàng, tôi nhận được 284 khi sử dụng SQL Server 2017 và 291 trong SQL Server 2019.
Ví dụ 2 - Lấy phụ huynh
Nếu bạn xem kỹ kết quả của
sys.trigger_event_types
, bạn sẽ thấy rằng các sự kiện kích hoạt DDL có thứ bậc.Dưới đây là một ví dụ cho thấy thứ bậc của
CREATE_TABLE
sự kiện kích hoạt.WITH event_types (Type, Type_Name, Parent_Type, Level) AS (SELECT type, type_name, parent_type, 1 AS level FROM sys.trigger_event_types WHERE type_name ='CREATE_TABLE' UNION TẤT CẢ CHỌN tet.type, tet.type_name, tet.parent_type , et.level + 1 cấp AS TỪ event_types AS et JOIN sys.trigger_event_types AS tet ON et.parent_type =tet.type) SELECT Loại, Type_name, Parent_TypeFROM event_typesORDER BY cấp DESC;Kết quả:
+ -------- + --------------------------- + --------- ------ + | Loại | Type_name | Parent_Type || -------- + --------------------------- + ---------- ----- || 10001 | DDL_EVENTS | NULL || 10016 | DDL_DATABASE_LEVEL_EVENTS | 10001 || 10017 | DDL_TABLE_VIEW_EVENTS | 10016 || 10018 | DDL_TABLE_EVENTS | 10017 || 21 | CREATE_TABLE | 10018 | + -------- + --------------------------- + ---------- ----- +Chúng ta có thể thấy rằng
DDL_EVENTS
ở đầu phân cấp, theo sau làDDL_DATABASE_LEVEL_EVENTS
, v.v., cho đến khi chúng tôi đạt đượcCREATE_TABLE
.Một cách khác để hình dung nó như thế này:
DDL_EVENTS> DDL_DATABASE_LEVEL_EVENTS> DDL_TABLE_VIEW_EVENTS> DDL_TABLE_EVENTS> CREATE_TABLEBạn có thể thay thế
CREATE_TABLE
trong truy vấn với bất kỳ loại sự kiện nào khác để xem thứ bậc của nó.Ngoài ra, hãy xem Truy vấn trả về danh sách phân cấp các loại sự kiện trình kích hoạt trong SQL Server để trả về danh sách phân cấp các loại sự kiện trình kích hoạt.