Bài tập về trigger trong SQL

Trigger trong SQL Server: Chỉ dẫn từ ?-Ż về Trigger Đăng bởi Trung Nguyen mộ

Trigger trong SQL Server: Chỉ dẫn từ ?-Ż về Trigger                     Đăng bởi Trung Nguyen                         một năm kia trong                     SQL Server

Trigger trong SQL Server là các stored procedure đặc biệt được thực thi auto để bình luận với các đối tượng CSDL, CSDL & các buổi lễ máy chủ. SQL Server phân phối ba loại trigger:

  • Trigger dữ liệu ngôn từ thao tác (Trigger DML) kích hoạt khi xảy ra buổi lễ INSERT, UPDATE & DELETE dữ liệu xảy ra trên bảng.
  • Trigger dữ liệu ngôn từ khái niệm (Trigger DDL) kích hoạt khi xảy ra các câu lệnh CREATE, ALTER & DROP.
  • Trigger đăng nhập (Trigger Logon) kích hoạt khi xảy ra các buổi lễ LOGON.

Tạo trigger trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng câu lệnh CREATE TRIGGER trong SQL Server để tạo một trigger mới.

Giới thiệu về câu lệnh CREATE TRIGGER trong SQL Server

Câu lệnh CREATE TRIGGER cho phép bạn tạo một trigger mới sẽ được kích hoạt auto bất kì bao giờ một buổi lễ như INSERT, DELETE hoặc UPDATE xảy ra so với một bảng.

Sau đây minh họa cú pháp của câu lệnh CREATE TRIGGER:CREATE TRIGGER [schema_name.]trigger_name ON table_name AFTER  {[INSERT],[UPDATE],[DELETE]} [NOT FOR REPLICATION] AS {sql_statements}

Trong cú pháp này:

  • schema_name là tên của lược đồ mà trigger thuộc. Tên lược đồ là tùy chọn.
  • trigger_name là tên do người dùng chỉ định cho trigger.
  • table_name là bảng sẽ vận dụng trigger.
  • Buổi lễ kích hoạt trigger được liệt kê trong câu lệnh AFTER. Buổi lễ này có thể là INSERT, UPDATE hoặc DELETE. Một trigger có thể kích hoạt với một hoặc nhiều buổi lễ xảy ra trên bảng.
  • Tùy chọn NOT FOR REPLICATION chỉ thị SQL Server không được kích hoạt trigger khi sửa đổi dữ liệu được thực hiện như một phần của công cuộc copy.
  • sql_statements là một hoặc nhiều câu lệnh Transact-SQL được sử dụng để thực hiện các hành động sau thời điểm một buổi lễ xảy ra.

Các bảng ảo cho trigger: INSERTED & DELETED

SQL Server phân phối hai bảng ảo đặc biệt cho trigger là bảng INSERTED & DELETED. SQL Server sử dụng các bảng này để tìm nạp dữ liệu của bản ghi đã sửa đổi trước & sau thời điểm buổi lễ xảy ra.

Bảng dưới đây cho thấy bài viết của bảng INSERTED & DELETED trước & sau mỗi buổi lễ: Buổi lễ Bảng INSERTED chứa Bảng DELETED chứa INSERT Các bản ghi đã được insert Trống UPDATE Các bản ghi sau thời điểm được cập nhật Các bản ghi trước khi được cập nhật DELETE Trống Các bản ghi đã được delete

Hãy xem một số chẳng hạn tạo trigger trong SQL Server. Https://phptravels.vn/ sẽ sử dụng bảng production.products trong CSDL mẫu BikeStores để minh họa.

Chẳng hạn tạo bảng để ghi nhật ký biến đổi

Câu lệnh sau đây tạo một bảng có tên production.product_audits để ghi thông tin khi một buổi lễ INSERT hoặc DELETE xảy ra so với bảng production.products:CREATE TABLE production.product_audits ( change_id INT IDENTITY PRIMARY KEY, product_id INT NOT NULL, product_name VARCHAR(255) NOT NULL, brand_id INT NOT NULL, category_id INT NOT NULL, model_year SMALLINT NOT NULL, list_price DEC(10,2) NOT NULL, updated_at DATETIME NOT NULL, operation CHAR(3) NOT NULL, CHECK(operation = ‘INS’ or operation=’DEL’) );

Bảng production.product_audits có toàn bộ các cột từ bảng production.products. Không những thế, nó được bổ sung thêm một vài cột để ghi lại những biến đổi chẳng hạn updated_at, operation & change_id.

Chẳng hạn tạo trigger DML trong SQL Server

Trước nhất, để tạo một trigger mới, bạn chỉ định tên của trigger & lược đồ mà trigger thuộc về sau mệnh đề CREATE TRIGGER như sau:CREATE TRIGGER production.trg_product_audit

Kế tiếp, bạn chỉ định tên của bảng trong mệnh đề ON, trigger sẽ kích hoạt khi xảy ra buổi lễ trên bảng này:ON production.products

Sau đó, bạn liệt kê một hoặc nhiều buổi lễ sẽ kích hoạt trigger trong mệnh đề AFTER:AFTER INSERT, DELETE

Phần thân của trigger khởi đầu bằng keyword AS:AS BEGIN

Sau đó, bên trong thân của trigger, bạn seting SET NOCOUNT ON để ngăn chặn cảnh báo số lượng bản ghi bị tác động bất kì bao giờ trigger được kích hoạt.SET NOCOUNT ON;

Trigger sẽ INSERT một bản ghi vào bảng production.product_audits bất kì bao giờ một bản ghi được chèn vào hoặc xóa khỏi bảng production.products. Dữ liệu để chèn vào bảng production.product_audits được phân phối từ bảng INSERTED & DELETED thông qua toán tử UNION ALL như sau:INSERT INTO production.product_audits ( product_id, product_name, brand_id, category_id, model_year, list_price, updated_at, operation ) SELECT ι.product_id, product_name, brand_id, category_id, model_year, ι.list_price, GETDATE(), ‘INS’ FROM inserted AS ι UNION ALL SELECT {d}.product_id, product_name, brand_id, category_id, model_year, {d}.list_price, getdate(), ‘DEL’ FROM deleted AS {d};

Sau đây câu lệnh tạo trigger hoàn chỉnh:CREATE TRIGGER production.trg_product_audit ON production.products AFTER INSERT, DELETE AS BEGIN SET NOCOUNT ON; INSERT INTO production.product_audits( product_id, product_name, brand_id, category_id, model_year, list_price, updated_at, operation ) SELECT ι.product_id, product_name, brand_id, category_id, model_year, ι.list_price, GETDATE(), ‘INS’ FROM inserted ι UNION ALL SELECT {d}.product_id, product_name, brand_id, category_id, model_year, {d}.list_price, GETDATE(), ‘DEL’ FROM deleted {d}; END

Cuối cùng, bạn thực thi câu lệnh trên để tạo trigger. Khi trigger được tạo, bạn có thể tìm ra nó trong thư mục Triggers của bảng như trong hình sau:

Kiểm soát hoạt động của trigger trong SQL Server

Câu lệnh sau đây chèn một bản ghi mới vào bảng production.products:INSERT INTO production.products ( product_name, brand_id, category_id, model_year, list_price ) VALUES ( ‘Check product’, 1, 1, 2018, 599 );

Vì buổi lễ INSERT này, trigger production.trg_product_audit đã được kích hoạt trên bảng production.products & chèn một bản ghi vào bảng production.product_audits.

Xem Thêm  Cách điều chỉnh nội dung, phần đệm, đường viền và lề của một phần tử HTML bằng CSS - tăng kích thước đường viền css

Hãy xem bài viết của bảng production.product_audits:SELECT * FROM production.product_audits;

Đây là đầu ra:

Câu lệnh sau xóa một bản ghi khỏi bảng production.products:DELETE FROM production.products WHERE product_id = 322;

Đúng như phán đoán, trigger đã được kích hoạt & chèn bản ghi đã xóa vào bảng production.product_audits:SELECT * FROM production.product_audits;

Hình ảnh sau đây cho thấy đầu ra:

Trong chỉ dẫn này, bạn đã học cách tạo một kích hoạt trong SQL Server để thỏa mãn với một hoặc nhiều buổi lễ như chèn & xóa.

Trigger INSTEAD OF trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng trigger INSTEAD OF trong SQL Server để chèn dữ liệu vào bảng thông qua lượt xem.

Trigger INSTEAD OF là gì?

Trigger INSTEAD OF là một trigger cho phép bạn bỏ qua một câu lệnh INSERT, DELETE hoặc UPDATE một bảng hoặc một lượt xem & thực thi câu lệnh khác được khái niệm trong trigger. Các thao tác chèn, xóa hoặc update thực tiễn hoàn toàn không xảy ra.

Nói cách khác, trigger INSTEAD OF bỏ qua một câu lệnh DML & thực thi các câu lệnh khác được khái niệm trong trigger.

Cú pháp trigger INSTEAD OF trong SQL Server

Dưới đây minh họa cú pháp về cách tạo trigger INSTEAD OF:CREATE TRIGGER [schema_name.] trigger_name ON view_name INSTEAD OF {[INSERT] [,] [UPDATE] [,] [DELETE] } AS {sql_statements}

Trong cú pháp này:

  • Trước nhất, chỉ định tên của trigger & lược đồ (tùy chọn) mà trigger thuộc về sau mệnh đề CREATE TRIGGER.
  • Thứ hai, chỉ định tên của bảng hoặc lượt xem link với trigger.
  • Thứ ba, xác nhận một buổi lễ để kích hoạt trigger INSTEAD OF như INSERT, DELETE hoặc UPDATE. Trigger có thể được kích hoạt với một hoặc nhiều buổi lễ.
  • Thứ tư, khái niệm phần thân của trigger sau keyword AS. Phần thân của trigger có thể bao gồm một hoặc nhiều câu lệnh Transact-SQL.

Chẳng hạn về trigger INSTEAD OF trong SQL Server

Một chẳng hạn điển hình của việc sử dụng trigger INSTEAD OF là ghi đè thao tác chèn, update hoặc xóa trên lượt xem.

Giả sử, một vận dụng cần chèn các brand name mới vào bảng production.brands. Bên cạnh đó, các brand name mới nên được lưu trữ trong một bảng khác được gọi là production.brand_approvals để chứng nhận trước khi chèn vào bảng production.brands.

Để thực hiện điều này, bạn tạo một lượt xem có tên là production.vw_brands cho vận dụng để chèn các brand name mới. Nếu các brand name được chèn vào lượt xem, một trigger INSTEAD OF sẽ được kích hoạt để chèn các brand name vào bảng production.brand_approvals.

Hình ảnh sau đây minh họa công cuộc:

Sơ đồ này không hiển thị tên lược đồ của toàn bộ các đối tượng CSDL vì mục đích dễ dàng.

Câu lệnh sau đây tạo một bảng mới có tên production.brand_approvals để lưu trữ các brand name đang chờ được chứng nhận:CREATE TABLE production.brand_approvals( brand_id INT IDENTITY PRIMARY KEY, brand_name VARCHAR(255) NOT NULL );

Câu lệnh sau đây tạo thành một lượt xem mới tên là production.vw_brands dựa theo bảng production.brands & production.brand_approvals:CREATE VIEW production.vw_brands AS SELECT brand_name, ‘Approved’ approval_status FROM production.brands UNION SELECT brand_name, ‘Pending Approval’ approval_status FROM production.brand_approvals;

Khi một bản ghi được chèn vào lượt xem production.vw_brands, tất cả chúng ta cần chuyển nó tới bảng production.brand_approvals thông qua trigger INSTEAD OF như sau:CREATE TRIGGER production.trg_vw_brands ON production.vw_brands INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON; INSERT INTO production.brand_approvals ( brand_name ) SELECT ι.brand_name FROM inserted ι WHERE ι.brand_name NOT IN ( SELECT brand_name FROM production.brands ); END

Trigger chèn thương hiệu mới vào bảng production.brand_approvals nếu thương hiệu không tồn tại trong bảng production.brands.

Hiện thời tất cả chúng ta hãy chèn một brand name mới vào lượt xem production.vw_brands để xem chuyện gì xảy ra nhé:INSERT INTO production.vw_brands(brand_name) VALUES(‘Eddy Merckx’);

Câu lệnh INSERT này đã kích hoạt trigger INSTEAD OF để chèn một bản ghi mới vào bảng production.brand_approvals.

Nếu bạn truy vấn dữ liệu từ lượt xem production.vw_brands, bạn sẽ thấy một bản ghi mới hiện ra:SELECT brand_name, approval_status FROM production.vw_brands;

Câu lệnh sau đây cho thấy bài viết của bảng production.brand_approvals:SELECT * FROM production.brand_approvals;

Trong phần này, bạn đã tìm tòi về trigger INSTEAD OF trong SQL Server & cách tạo trigger INSTEAD OF để chèn dữ liệu vào bảng thông qua lượt xem.

Trigger DDL trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng trigger ngôn từ khái niệm dữ liệu (Data Definition Language – DDL) của SQL Server để theo dõi các biến đổi được thực hiện so với các đối tượng CSDL.

Giới thiệu về trigger DDL trong SQL Server

Trigger DDL của SQL Server bình luận các buổi lễ máy chủ hoặc CSDL hơn là các sửa đổi dữ liệu bảng. Những buổi lễ này được tạo thành bởi các câu lệnh Transact-SQL thường khởi đầu với một trong những keyword sau CREATE, ALTER, DROP, GRANT, DENY, REVOKE hoặc UPDATE STATISTICS.

Chẳng hạn: bạn có thể viết một trigger DDL để ghi nhật ký bất kì bao giờ người dùng thực thi câu lệnh CREATE TABLE hoặc ALTER TABLE.

Trigger DDL hữu dụng trong các trường hợp sau:

  • Ghi lại các biến đổi trong lược đồ CSDL.
  • Ngăn chặn một số biến đổi rõ ràng so với lược đồ CSDL.
  • Phản ứng với một biến đổi trong lược đồ CSDL.

Phần sau trình bày cú pháp tạo trigger DDL:CREATE TRIGGER trigger_name ON  ALL SERVER [WITH ddl_trigger_option] FOR event_group AS {sql_statement}

trigger_name

Chỉ định tên trình kích hoạt do người dùng khái niệm sau keyword CREATE TRIGGER. Note rằng bạn không phải chỉ định lược đồ (schema) cho một trigger DDL vì nó không liên quan đến table hoặc lượt xem CSDL thực tiễn.

Xem Thêm  Làm thế nào để cuộn đến một phần tử bên trong một div bằng javascript? - js cuộn đến phần tử

DATABASE | ALL SERVER

Sử dụng DATABASE nếu trình kích hoạt bình luận các buổi lễ trong phạm vi CSDL hoặc ALL SERVER nếu trình kích hoạt bình luận các buổi lễ trong phạm vi máy chủ.

ddl_trigger_option

Các tùy chọn ddl_trigger_option chỉ rõ mệnh đề ENCRYPTION & / hoặc EXECUTE AS. ENCRYPTION mã hóa khái niệm của trigger. EXECUTE AS xác nhận hoàn cảnh bảo mật mà theo đó trigger được thực thi.

event_type | event_group

Các event_type nêu ra một buổi lễ DDL kích hoạt trigger như CREATE_TABLE, ALTER_TABLE, vv.

event_group là một nhóm các buổi lễ event_type ví dụ như DDL_TABLE_EVENTS.

Trigger có thể đăng ký một hoặc nhiều buổi lễ hoặc nhóm buổi lễ.

Chẳng hạn về tạo trigger DDL trong SQL Server

Giả sử bạn mong muốn chớp lấy toàn bộ các sửa đổi được thực hiện so với chỉ mục CSDL để bạn có thể theo dõi tốt hơn năng suất của sản phẩm chủ CSDL liên quan đến những biến đổi chỉ mục này.

Trước nhất, tạo một bảng mới có tên index_logs để ghi các biến đổi chỉ mục:CREATE TABLE index_logs ( log_id INT IDENTITY PRIMARY KEY, event_data XML NOT NULL, changed_by SYSNAME NOT NULL ); GO

Kế tiếp, tạo một trigger DDL để theo dõi các biến đổi chỉ mục & chèn dữ liệu buổi lễ vào bảng index_logs:CREATE TRIGGER trg_index_changes ON DATABASE FOR CREATE_INDEX, ALTER_INDEX, DROP_INDEX AS BEGIN SET NOCOUNT ON; INSERT INTO index_logs ( event_data, changed_by ) VALUES ( EVENTDATA(), USER ); END; GO

Trong phần thân của trigger, http://phptravels.vn/ đã sử dụng hàm EVENTDATA() trả về thông tin về các buổi lễ máy chủ hoặc CSDL. Hàm này chỉ khả dụng bên trong DDL hoặc trình kích hoạt đăng nhập.

Sau đó, tạo chỉ mục cho cột first_name & last_name của bảng sales.customers:CREATE NONCLUSTERED INDEX nidx_fname ON sales.customers(first_name); GO CREATE NONCLUSTERED INDEX nidx_lname ON sales.customers(last_name); GO

Sau đó, truy vấn dữ liệu từ bảng index_changes để kiểm soát xem buổi lễ tạo chỉ mục có được trình kích hoạt ghi lại đúng cách hay không:SELECT * FROM index_logs;

Đây là đầu ra:

Nếu bạn bấm vào ô của cột event_data, bạn có thể xem dữ liệu XML của buổi lễ như sau:

Trong phần này, bạn đã tìm tòi cách tạo trigger DDL trong SQL Server bình luận một hoặc nhiều buổi lễ DDL.

Tắt trigger trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng câu lệnh DISABLE TRIGGER trong SQL Server để tắt trigger.

Giới thiệu lệnh DISABLE TRIGGER trong SQL Server

Đôi lúc, vì mục đích giải quyết sự cố hoặc khôi phục dữ liệu, bạn có thể mong muốn tắt tạm thời trigger. Để làm điều này, bạn sử dụng câu lệnh DISABLE TRIGGER:DISABLE TRIGGER [schema_name.][trigger_name] ON [object_name | DATABASE | ALL SERVER]

Trong cú pháp này:

  • Trước nhất, hãy chỉ định tên của lược đồ chứa trigger & tên của trigger mà bạn mong muốn tắt sau lệnh DISABLE TRIGGER.
  • Thứ hai, chỉ định tên bảng hoặc lượt xem mà trigger được link nếu trigger là trigger DML. Sử dụng DATABASE nếu trigger có phạm vi CSDL DDL hoặc SERVER nếu trigger có phạm vi máy chủ DDL.

Chẳng hạn về lệnh DISABLE TRIGGER trong SQL Server

Câu lệnh sau tạo một bảng mới có tên sales.members để minh họa:CREATE TABLE sales.members ( member_id INT IDENTITY PRIMARY KEY, customer_id INT NOT NULL, member_level CHAR(10) NOT NULL );

Câu lệnh sau tạo một trigger được kích hoạt bất kì bao giờ một hàng mới được chèn vào bảng sales.members. Với mục đích minh họa, trigger chỉ trả về một cảnh báo dễ dàng.CREATE TRIGGER sales.trg_members_insert ON sales.members AFTER INSERT AS BEGIN PRINT ‘? new thành viên has been inserted’; END;

Câu lệnh sau sẽ chèn một hàng mới vào bảng sales.members:INSERT INTO sales.members(customer_id, member_level) VALUES(1,’Silver’);

Do buổi lễ INSERT này, trigger đã được kích hoạt & in ra cảnh báo sau:? new thành viên has been inserted

Để tắt trigger sales.trg_members_insert, bạn sử dụng câu lệnh DISABLE TRIGGER như sau:DISABLE TRIGGER sales.trg_members_insert ON sales.members;

Hiện thời nếu bạn chèn một hàng mới vào bảng sales.members, trigger sẽ không được kích hoạt.INSERT INTO sales.members(customer_id, member_level) VALUES(2,’Gold’);

Nó có nghĩa là trình kích hoạt đã bị vô hiệu hóa.

Note rằng trigger vẫn còn trên bảng. Nếu bạn xem trigger trong SQL Server Management Studio (SSMS), bạn sẽ nhận biết biểu tượng chữ thập đỏ trên tên trigger bị vô hiệu hóa:

Tắt toàn bộ trigger của bảng trong SQL Server

Để tắt toàn bộ các trigger của bảng, bạn sử dụng câu lệnh sau:DISABLE TRIGGER ALL ON table_name;

Trong câu lệnh này, bạn chỉ cần chỉ định tên của bảng để vô hiệu hóa toàn bộ các trigger thuộc về bảng đó.

Câu lệnh sau tạo một trigger mới trên bảng sales.members được kích hoạt sau buổi lễ xóa:CREATE TRIGGER sales.trg_members_delete ON sales.members AFTER DELETE AS BEGIN PRINT ‘? new thành viên has been deleted’; END;

Để tắt toàn bộ các trigger trên bảng sales.members, bạn sử dụng câu lệnh sau:DISABLE TRIGGER ALL ON sales.members;

Hình ảnh sau đây cho thấy tình trạng của toàn bộ các trigger thuộc bảng sales.members:

Tắt toàn bộ các trigger của CSDL trong SQL Server

Để tắt toàn bộ các trigger của CSDL bây giờ, bạn sử dụng câu lệnh sau:DISABLE TRIGGER ALL ON DATABASE;

Bật trigger trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng câu lệnh ENABLE TRIGGER trong SQL Server để bật trigger.

Giới thiệu về câu lệnh ENABLE TRIGGER trong SQL Server

Câu lệnh ENABLE TRIGGER cho phép bạn bật trigger để nó có thể được kích hoạt bất kì bao giờ một buổi lễ xảy ra.

Sau đây minh họa cú pháp của câu lệnh ENABLE TRIGGER:ENABLE TRIGGER [schema_name.][trigger_name] ON [object_name | DATABASE | ALL SERVER]

Xem Thêm  Từ khoá này trong Java: Là gì & Cách sử dụng với Ví dụ - java điều này có nghĩa là gì

Trong cú pháp này:

  • Trước nhất, chỉ định tên của trigger mà bạn mong muốn bật. Theo tùy chọn, bạn có thể chỉ định tên của lược đồ chứa trigger.
  • Thứ hai, chỉ định bảng chứa trigger nếu nó là trigger DML. Sử dụng DATABASE nếu trigger là trigger có phạm vi CSDL DDL hoặc ALL SERVER nếu trigger là trigger có phạm vi máy chủ DDL.

Chẳng hạn về lệnh ENABLE TRIGGER trong SQL Server

Https://phptravels.vn/ sẽ sử dụng bảng sales.members được tạo trong phần DISABLE TRIGGER để minh họa.

Để bật trigger sales.sales.trg_members_insert, bạn sử dụng câu lệnh sau:ENABLE TRIGGER sales.trg_members_insert ON sales.members;

Sau khoảng thời gian được bật, bạn có thể thấy tình trạng của trigger thông qua SQL Server Management Studio như được hiển thị trong hình sau:

Bật toàn bộ trigger của bảng trong SQL Server

Để bật toàn bộ các trigger của một bảng, bạn sử dụng câu lệnh sau:ENABLE TRIGGER ALL ON table_name;

Trong cú pháp này, bạn chỉ cần chỉ định tên của bảng mà bạn mong muốn bật toàn bộ các trigger được link.

Chẳng hạn: để bật toàn bộ các trigger của bảng sales.members, bạn sử dụng câu lệnh sau:ENABLE TRIGGER ALL ON sales.members;

Hình ảnh sau đây cho thấy tình trạng của toàn bộ các trigger của bảng sales.members:

Bật toàn bộ trigger của CSDL trong SQL Server

Để bật toàn bộ trigger của CSDL bây giờ, bạn sử dụng câu lệnh sau:ENABLE TRIGGER ALL ON DATABASE;

4 cách xem code của trigger trong SQL Server

Trong phần này, bạn sẽ tìm tòi 4 cách xem code của trigger trong SQL Server.

Xem code của trigger bằng cách truy vấn từ lượt xem hệ thống

Bạn có thể xem code của trigger bằng cách truy vấn dữ liệu dựa theo lượt xem sys.sql_modules:SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID(‘sales.trg_members_delete’);

Đây là đầu ra:

Trong truy vấn này, bạn truyền tên của trigger mà bạn mong muốn xem code cho hàm OBJECT_ID() trong mệnh đề WHERE.

Xem code của trigger bằng cách dùng hàm OBJECT_DEFINITION

Bạn có thể xem code của trigger bằng cách dùng hàm OBJECT_DEFINITION như sau:SELECT OBJECT_DEFINITION ( OBJECT_ID( ‘sales.trg_members_delete’ ) ) AS trigger_definition;

Trong truy vấn này, bạn truyền tên trigger cho hàm OBJECT_ID để lấy ID của trigger. Sau đó, bạn sử dụng hàm OBJECT_DEFINITION() để lấy code của trigger dựa theo ID của nó.

Xem code của trigger bằng cách dùng stored procedure sp_helptext

Cách dễ dàng nhất để lấy code của trigger là sử dụng stored procedure sp_helptext như sau:EXEC sp_helptext ‘sales.trg_members_delete’ ;

Stored procedure sp_helptext trả về code được sử dụng để tạo thành một đối tượng, trong trường hợp đó là trigger.

Xem code của trigger bằng SSMS

Để xem code của trigger DML:

  1. Trước nhất, trong Object Explorer, connect với CSDL.
  2. Thứ hai, di chuyển tới bảng chứa trigger mà bạn mong muốn xem code.
  3. Thứ ba, mở rộng danh mục Triggers, Click chuột phải vào trigger bạn mong muốn xem code, sau đó bấm Modify. Code khái niệm trigger hiện ra trong cửa sổ truy vấn.

Liệt kê toàn bộ trigger trong SQL Server

Để liệt kê toàn bộ trigger trong SQL Server, bạn truy vấn dữ liệu từ lượt xem sys.triggers như sau:SELECT name, is_instead_of_trigger FROM sys.triggers WHERE type = ‘TR’;

Hình ảnh sau đây cho thấy đầu ra:

Xóa trigger trong SQL Server

Trong phần này, bạn sẽ tìm tòi cách dùng câu lệnh DROP TRIGGER trong SQL Server để xóa các trigger hiện có.

Giới thiệu lệnh DROP TRIGGER trong SQL Server

Câu lệnh DROP TRIGGER trong SQL Server xóa một hoặc nhiều trigger khỏi CSDL. Phần sau minh họa cú pháp của câu lệnh DROP TRIGGER để xóa trigger DML:DROP TRIGGER [ IF EXISTS ] [schema_name.]trigger_name [ ,…n ];

Trong cú pháp này:

  • IF EXISTS chỉ xóa trigger khi nó đã tồn tại.
  • schema_name là tên của lược đồ chứa trigger DML.
  • trigger_name là tên của trigger mà bạn mong muốn xóa.

Nếu bạn mong muốn xóa nhiều trigger cùng một lúc, bạn cần phân chia các trigger bằng dấu phẩy.

Để xóa một hoặc nhiều trigger DDL, bạn sử dụng cú pháp sau của câu lệnh DROP TRIGGER:DROP TRIGGER [ IF EXISTS ] trigger_name [ ,…n ] ON ALL SERVER ;

Trong cú pháp này:

  • DATABASE nêu ra rằng phạm vi của trigger DDL vận dụng cho CSDL bây giờ.
  • ALL SERVER cho biết phạm vi của trigger DDL vận dụng cho server bây giờ.

Để xóa trigger buổi lễ LOGON, bạn sử dụng cú pháp sau:DROP TRIGGER [ IF EXISTS ] trigger_name [ ,…n ] ON ALL SERVER;

Note rằng khi bạn xóa một bảng, toàn bộ trigger được link với bảng cũng auto bị xóa.

Chẳng hạn về lệnh DROP TRIGGER trong SQL Server

Xóa trigger DML trong SQL Server

Câu lệnh sau sẽ xóa một trigger DML có tên sales.trg_member_insert:DROP TRIGGER IF EXISTS sales.trg_member_insert;

Xóa trigger DDL trong SQL Server

Câu lệnh sau sẽ xóa trigger DDL có tên trg_index_changes:DROP TRIGGER IF EXISTS trg_index_changes;

Lời kết

Trong chỉ dẫn này, bạn đã tìm tòi về:

  • Trigger trong SQL Server là các stored procedure đặc biệt được thực thi auto để bình luận với các đối tượng CSDL, CSDL & các buổi lễ máy chủ.
  • SQL Server phân phối ba loại trigger: Trigger dữ liệu ngôn từ thao tác (trigger DML), Trigger dữ liệu ngôn từ khái niệm (trigger DDL), Trigger đăng nhập (trigger Logon).
  • Sử dụng câu lệnh CREATE TRIGGER trong SQL Server để tạo một trigger mới.
  • Sử dụng trigger INSTEAD OF trong SQL Server để chèn dữ liệu vào bảng thông qua lượt xem.
  • Sử dụng câu lệnh DISABLE TRIGGER để tắt trigger trong SQL Server.
  • Sử dụng câu lệnh ENABLE TRIGGER để bật trigger trong SQL Server.
  • Sử dụng câu lệnh DROP TRIGGER để xóa trigger trong SQL Server.

Video liên quan

Viết một bình luận