Trigger Trong SQL Server: Hướng Dẫn Từ A-Z Về Trigger - Comdy

Trigger là một hàm đặc biệt quan trọng và thường được sử dụng trong các bài toán, chương trình quản lý cơ sở dữ liệu. Vậy trigger là gì trong sql? Cách sử dụng trigger trong sql và cách viết trigger trong sql như thế nào? Hãy cùng Comdy tìm hiểu chi tiết hơn trong bài viết này bạn nhé.

Giới thiệu tổng quan về trigger trong SQL Server

Table of Contents

Toggle
  • Giới thiệu tổng quan về trigger trong SQL Server
    • Trigger trong SQL là gì?
    • Câu lệnh CREATE TRIGGER in SQL Server
    • Các bảng ảo cho trigger trong cơ sở dữ liệu: INSERTED và DELETED
    • Ví dụ tạo bảng để ghi nhật ký thay đổi
    • Ví dụ tạo trigger DML trong SQL Server
    • Kiểm tra hoạt động của trigger trong SQL Server
  • Trigger INSTEAD OF trong SQL Server
    • Trigger INSTEAD OF là gì?
    • Cú pháp trigger INSTEAD OF trong SQL Server
    • Ví dụ về trigger INSTEAD OF trong SQL Server
  • Trigger DDL trong SQL Server
    • Giới thiệu về trigger DDL trong SQL Server
    • trigger_name
    • DATABASE | ALL SERVER
    • ddl_trigger_option
    • event_type | event_group
    • Ví dụ về tạo trigger DDL trong SQL Server
  • Tắt trigger trong SQL Server
    • Giới thiệu lệnh DISABLE TRIGGER trong SQL Server
    • Ví dụ về lệnh DISABLE TRIGGER trong SQL Server
    • Tắt tất cả trigger của bảng trong SQL Server
    • Tắt tất cả các trigger của cơ sở dữ liệu trong SQL Server
  • Bật trigger trong SQL Server
    • Giới thiệu về câu lệnh ENABLE TRIGGER SQL Server
    • Ví dụ về lệnh ENABLE TRIGGER trong SQL Server
    • Bật tất cả trigger của bảng trong SQL Server
    • Bật tất cả trigger của cơ sở dữ liệu trong SQL Server
  • 4 cách xem code của trigger trong SQL Server
    • Xem code của trigger bằng cách truy vấn từ view hệ thống
    • Xem code của trigger bằng cách sử dụng hàm OBJECT_DEFINITION
    • Xem code của trigger bằng cách sử dụng stored procedure sp_helptext
    • Xem code của trigger bằng SSMS
  • Liệt kê tất cả trigger trong SQL Server
  • Xóa trigger trong SQL Server
    • Giới thiệu lệnh DROP TRIGGER trong SQL Server
    • Ví dụ về lệnh DROP TRIGGER trong SQL Server
      • Xóa trigger DML trong SQL Server
      • Xóa trigger DDL trong SQL Server
  • Set nocount on trong SQL là gì?
  • Các loại trigger trong SQL server là gì?
    • AFTER Trigger
    • INSTEAD OF Trigger
  • Câu lệnh create trigger insert trong SQL server là gì?
  • Kết lại
Trigger trong SQL là gì
Trigger trong SQL Server là các stored procedure đặc biệt được thực thi tự động để phản hồi với các đối tượng cơ sở dữ liệu, cơ sở dữ liệu và các sự kiện máy chủ

Trigger trong SQL là gì?

Trigger SQL là gì? Trigger trong SQL Server là các stored procedure đặc biệt được thực thi tự động để phản hồi với các đối tượng cơ sở dữ liệu, cơ sở dữ liệu và các sự kiện máy chủ. SQL Server cung cấp ba loại trigger:

  • Trigger dữ liệu ngôn ngữ thao tác (Trigger DML) kích hoạt khi xảy ra sự kiện INSERT, UPDATE và DELETE dữ liệu xảy ra trên bảng.
  • Trigger dữ liệu ngôn ngữ định nghĩa (Trigger DDL) kích hoạt khi xảy ra các câu lệnh CREATE, ALTER và DROP.
  • Trigger đăng nhập (Trigger  Logon) kích hoạt khi xảy ra các sự kiện LOGON.

Câu lệnh CREATE TRIGGER in SQL Server

Như vậy bạn đã biết trigger là gì. Cách tạo trigger trong sql server là sử dụng câu lệnhCREATE TRIGGER. Câu lệnh này cho phép bạn tạo một trigger mới sẽ được kích hoạt tự động bất cứ khi nào một sự kiện như INSERT, DELETE hoặc trigger update xảy ra đối với một bảng.

Sau đây là ví dụ về trigger trong sql với 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à sql 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ẽ áp dụng trigger.
  • Sự kiện kích hoạt trigger được liệt kê trong câu lệnh AFTER. Sự kiện này có thể là INSERT, UPDATE hoặc trigger delete trong sql. Một trigger có thể kích hoạt với một hoặc nhiều sự kiện 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 quá trình sao chép.
  • 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 khi một sự kiện xảy ra.

Các bảng ảo cho trigger trong cơ sở dữ liệu: INSERTED và DELETED

Bảng ảo cho trigger trong cơ sở dữ liệu
SQL Server cung cấp hai bảng ảo đặc biệt cho trigger là bảng INSERTED và DELETED.

SQL Server cung cấp hai bảng ảo đặc biệt cho trigger là bảng INSERTED và DELETED. SQL Server sử dụng các bảng này để thu thập dữ liệu của bản ghi đã sửa đổi trước và sau khi sự kiện xảy ra.

Bảng dưới đây cho thấy nội dung của bảng INSERTED và DELETED trước và sau mỗi sự kiện:

Sự kiện Bảng INSERTED trong SQL Bảng DELETED trong SQL
INSERT Các bản ghi đã được insert Trống
UPDATE Các bản ghi sau khi được trigger update trong sql Các bản ghi trước khi được trigger update trong sql
DELETE Trống Các bản ghi đã được delete

Ví dụ tạo bảng để ghi nhật ký thay đổ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 sự kiện INSERT hoặc DELETE xảy ra đối 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ó tất cả các cột từ bảng production.products. Bên cạnh đó, nó được bổ sung thêm một vài cột để ghi lại những thay đổi ví dụ updated_at, operation và change_id.

Ví dụ tạo trigger DML trong SQL Server

Ví dụ tạo trigger DML trong SQL Server
Lấy ví dụ cụ thể về cách tạo trigger DML trong SQL Server

Đầu tiên, để tạo một trigger mới, bạn chỉ định tên của trigger và lược đồ mà trigger thuộc về sau mệnh đề CREATE TRIGGER như sau:

CREATE TRIGGER production.trg_product_audit

Tiếp theo, bạn chỉ định tên của bảng trong mệnh đề ON, trigger sẽ kích hoạt khi xảy ra sự kiện trên bảng này:

ON production.products

Sau đó, bạn liệt kê một hoặc nhiều sự kiện sẽ kích hoạt trigger trong mệnh đề AFTER:

AFTER INSERT, DELETE

Phần thân của trigger bắt đầu bằng từ khóa AS:

AS BEGIN

Sau đó, bên trong thân của trigger, bạn thiết lập SET NOCOUNT ON để ngăn chặn thông báo số lượng bản ghi bị ảnh hưởng bất cứ khi nào 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 cứ khi nào 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 cung cấp từ bảng INSERTED và 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 i.product_id, product_name, brand_id, category_id, model_year, i.list_price, GETDATE(), 'INS' FROM inserted AS i 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 sql 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 i.product_id, product_name, brand_id, category_id, model_year, i.list_price, GETDATE(), 'INS' FROM inserted i UNION ALL SELECT d.product_id, product_name, brand_id, category_id, model_year, d.list_price, GETDATE(), 'DEL' FROM deleted d; END

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

Kiểm tra hoạt động của trigger trong SQL Server
Kiểm tra hoạt động của trigger trong SQL Server như thế nào?

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 ( 'Test product', 1, 1, 2018, 599 );

Vì sự kiện INSERT này, trigger production.trg_product_audit đã được kích hoạt trên bảng production.products và chèn một bản ghi vào bảng production.product_audits.

Hãy xem nội dung của bảng production.product_audits:

SELECT * FROM production.product_audits;

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ư dự đoán, câu lệnh trigger trong sql đã được kích hoạt và chèn bản ghi đã xóa vào bảng production.product_audits:

SELECT * FROM production.product_audits;

Trigger INSTEAD OF trong SQL Server

Trong phần này, bạn sẽ tìm hiểu cách sử dụng trigger INSTEAD OF trong SQL Server để chèn dữ liệu vào bảng thông qua view.

Trigger INSTEAD OF là gì?

Trigger INSTEAD OF là gì
INSTEAD OF là một trigger cho phép bạn bỏ qua một câu lệnh INSERT, DELETE hoặc UPDATE

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 view và thực thi câu lệnh khác được định nghĩa trong trigger. Các thao tác chèn, xóa hoặc cập nhật thực tế 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 và thực thi các câu lệnh khác được định nghĩa 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 {table_name | view_name } INSTEAD OF {[INSERT] [,] [UPDATE] [,] [DELETE] } AS {sql_statements}

Trong cú pháp này:

  • Đầu tiên, chỉ định tên của trigger và 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 view liên kết với trigger.
  • Thứ ba, xác định một sự kiện để 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 sự kiện.
  • Thứ tư, định nghĩa phần thân của trigger sau từ khóa 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.

Ví dụ về trigger INSTEAD OF trong SQL Server

Một ví dụ điển hình của việc sử dụng trigger INSTEAD OF là ghi đè thao tác chèn, cập nhật hoặc xóa trên view.

Giả sử, một ứng dụng cần chèn các thương hiệu mới vào bảng production.brands. Tuy nhiên, các thương hiệu mới nên được lưu trữ trong một bảng khác được gọi là production.brand_approvals để phê duyệt 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 view có tên là production.vw_brands cho ứng dụng để chèn các thương hiệu mới. Nếu các thương hiệu được chèn vào view, một trigger INSTEAD OF sẽ được kích hoạt để chèn các thương hiệu vào bảng production.brand_approvals.

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 thương hiệu đang chờ được phê duyệt:

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 ra một view mới tên là production.vw_brands dựa vào bảng production.brands và 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 view production.vw_brands, 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 i.brand_name FROM inserted i WHERE i.brand_name NOT IN ( SELECT brand_name FROM production.brands ); END

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

Bây giờ chúng ta hãy chèn một thương hiệu mới vào view 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ừ view production.vw_brands, bạn sẽ thấy một bản ghi mới xuất hiện:

SELECT brand_name, approval_status FROM production.vw_brands;

Câu lệnh sau đây cho thấy nội dung của bảng production.brand_approvals:

SELECT * FROM production.brand_approvals;

Trigger DDL trong SQL Server

Trigger DDL trong SQL Server
Trigger DDL của SQL Server phản hồi các sự kiện máy chủ hoặc cơ sở dữ liệu hơn là các sửa đổi dữ liệu bản

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

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

Ví dụ: bạn có thể viết một trigger DDL để ghi nhật ký bất cứ khi nào người dùng thực thi câu lệnh CREATE TABLE hoặc ALTER TABLE.

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

  • Ghi lại các thay đổi trong lược đồ cơ sở dữ liệu.
  • Ngăn chặn một số thay đổi cụ thể đối với lược đồ cơ sở dữ liệu.
  • Phản ứng với một thay đổi trong lược đồ cơ sở dữ liệu.

Phần sau trình bày cú pháp tạo trigger DDL:

CREATE TRIGGER trigger_name ON { DATABASE | ALL SERVER} [WITH ddl_trigger_option] FOR {event_type | event_group } AS {sql_statement}

trigger_name

Chỉ định tên trình kích hoạt do người dùng định nghĩa sau từ khóa CREATE TRIGGER. Lưu ý 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 view cơ sở dữ liệu thực tế.

DATABASE | ALL SERVER

Sử dụng DATABASE nếu trình kích hoạt phản hồi các sự kiện trong phạm vi cơ sở dữ liệu hoặc ALL SERVER nếu trình kích hoạt phản hồi các sự kiện trong phạm vi máy chủ.

ddl_trigger_option

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

event_type | event_group

Các event_type chỉ ra một sự kiện DDL kích hoạt trigger như CREATE_TABLE, ALTER_TABLE, vv.

event_group là một nhóm các sự kiện event_type chẳng hạn như DDL_TABLE_EVENTS.

Trigger có thể đăng ký một hoặc nhiều sự kiện hoặc nhóm sự kiện.

Ví dụ về tạo trigger DDL trong SQL Server

Giả sử bạn muốn nắm bắt tất cả các sửa đổi được thực hiện đối với chỉ mục cơ sở dữ liệu để bạn có thể theo dõi tốt hơn hiệu suất của máy chủ cơ sở dữ liệu liên quan đến những thay đổi chỉ mục này.

Đầu tiên, tạo một bảng mới có tên index_logs để ghi các thay đổ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

Tiếp theo, tạo một trigger DDL để theo dõi các thay đổi chỉ mục và chèn dữ liệu sự kiện 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, chúng tôi đã sử dụng hàm EVENTDATA() trả về thông tin về các sự kiện máy chủ hoặc cơ sở dữ liệu. 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 và 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 tra xem sự kiện 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;

Tắt trigger trong SQL Server

Tắt trigger trong SQL Server
Sử dụng câu lệnh DISABLE TRIGGER để tắt trigger trong SQL Server

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

Đôi khi, vì mục đích khắc phục sự cố hoặc khôi phục dữ liệu, bạn có thể 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 tiên, hãy chỉ định tên của lược đồ chứa trigger và tên của trigger mà bạn muốn tắt sau lệnh DISABLE TRIGGER.
  • Thứ hai, chỉ định tên bảng hoặc view mà trigger được liên kết nếu trigger là trigger DML. Sử dụng DATABASE nếu trigger có phạm vi cơ sở dữ liệu DDL hoặc SERVER nếu trigger có phạm vi máy chủ DDL.

Ví dụ 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 cứ khi nào 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 thông báo đơn giản.

CREATE TRIGGER sales.trg_members_insert ON sales.members AFTER INSERT AS BEGIN PRINT 'A new member 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 sự kiện INSERT này, trigger đã được kích hoạt và in ra thông báo sau:

A new member 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;

Bây giờ 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.

Lưu ý 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 thấy biểu tượng chữ thập đỏ trên tên trigger bị vô hiệu hóa:

Tắt tất cả trigger của bảng trong SQL Server

Để tắt tất cả 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 tất cả 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 sự kiện xóa:

CREATE TRIGGER sales.trg_members_delete ON sales.members AFTER DELETE AS BEGIN PRINT 'A new member has been deleted'; END;

Để tắt tất cả 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;

Tắt tất cả các trigger của cơ sở dữ liệu trong SQL Server

Để tắt tất cả các trigger của cơ sở dữ liệu hiện tại, bạn sử dụng câu lệnh sau:

DISABLE TRIGGER ALL ON DATABASE;

Bật trigger trong SQL Server

Bật trigger trong SQL Server
Câu lệnh ENABLE TRIGGER cho phép bạn bật trigger sql server để nó có thể được kích hoạt bất cứ khi nào một sự kiện xảy ra

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

Câu lệnh ENABLE TRIGGER cho phép bạn bật trigger sql server để nó có thể được kích hoạt bất cứ khi nào một sự kiện 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]

Trong cú pháp này:

  • Đầu tiên, chỉ định tên của trigger mà bạn 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 cơ sở dữ liệu DDL hoặc ALL SERVER nếu trigger là trigger có phạm vi máy chủ DDL.

Ví dụ về lệnh ENABLE TRIGGER trong SQL Server

Chúng tôi 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;

Bật tất cả trigger của bảng trong SQL Server

Để bật tất cả 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 muốn bật tất cả các trigger được liên kết.

Ví dụ: để bật tất cả các trigger sql server của bảng sales.members, bạn sử dụng câu lệnh sau:

ENABLE TRIGGER ALL ON sales.members;

Bật tất cả trigger của cơ sở dữ liệu trong SQL Server

Để bật tất cả trigger của cơ sở dữ liệu hiện tại, 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

Xem code của trigger trong SQL Server
4 cách xem code của trigger trong SQL Server là gì?

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

Bạn có thể xem code của trigger bằng cách truy vấn dữ liệu dựa trên view sys.sql_modules:

SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('sales.trg_members_delete');

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

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

Bạn có thể xem code của trigger bằng cách sử 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 sql server. Sau đó, bạn sử dụng hàm OBJECT_DEFINITION() để lấy code của trigger dựa trên ID của nó.

Xem code của trigger bằng cách sử dụng stored procedure sp_helptext

Cách đơn giản 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 ra một đối tượng, trong trường hợp này là trigger.

Xem code của trigger bằng SSMS

Để xem code của trigger DML:

  1. Đầu tiên, trong Object Explorer, kết nối với cơ sở dữ liệu.
  2. Thứ hai, di chuyển tới bảng chứa trigger mà bạn muốn xem code.
  3. Thứ ba, mở rộng menu Triggers, bấm chuột phải vào trigger bạn muốn xem code, sau đó bấm Modify. Code định nghĩa trigger xuất hiện trong cửa sổ truy vấn.

Liệt kê tất cả trigger trong SQL Server

Để liệt kê tất cả trigger trong SQL Server, bạn truy vấn dữ liệu từ view sys.triggers như sau:

SELECT name, is_instead_of_trigger FROM sys.triggers WHERE type = 'TR';

Xóa trigger trong SQL Server

Xóa trigger trong SQL Server
Sử dụng câu lệnh DROP TRIGGER trong SQL Server để xóa trigger

Trong phần này, bạn sẽ tìm hiểu cách sử 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 cơ sở dữ liệu. 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 muốn xóa.

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

Để xóa một hoặc nhiều sql server 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 { DATABASE | ALL SERVER };

Trong cú pháp này:

  • DATABASE chỉ ra rằng phạm vi của trigger DDL áp dụng cho cơ sở dữ liệu hiện tại.
  • ALL SERVER cho biết phạm vi của trigger DDL áp dụng cho server hiện tại.

Để xóa trigger sự kiện LOGON, bạn sử dụng cú pháp sau:

DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ] ON ALL SERVER;

Lưu ý rằng khi bạn xóa một bảng, tất cả trigger được liên kết với bảng cũng tự động bị xóa.

Ví dụ 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;

Set nocount on trong SQL là gì?

Trong SQL Server, SET NOCOUNT ON là một câu lệnh được sử dụng để tắt thông báo số bản ghi ảnh hưởng bởi các lệnh INSERT, UPDATE, và DELETE trong quá trình thực thi một lô lệnh hoặc một khối lệnh SQL.

Khi NOCOUNT được bật (ON), thông báo số bản ghi ảnh hưởng không được hiển thị, và trong môi trường một số ứng dụng hoặc khi thực hiện các quá trình lớn. Việc tắt thông báo này có thể giảm bớt gửi dữ liệu không cần thiết từ máy chủ SQL Server đến ứng dụng.

Ví dụ: SET NOCOUNT ON; — Các lệnh INSERT, UPDATE, DELETE ở đây không sẽ không hiển thị thông báo số bản ghi ảnh hưởng. SET NOCOUNT OFF; Trong lệnh create trigger sau mệnh đề on là gì?

Trong lệnh CREATE TRIGGER, mệnh đề ON sử dụng để xác định bảng hoặc chế độ xem mà trigger sẽ được kích hoạt. Cụ thể, nó chỉ định.

Cú pháp:

CREATE TRIGGER trigger_name ON table_name FOR [AFTER|INSTEAD OF] [INSERT|UPDATE|DELETE] AS — Trigger body (Tương thích với mệnh đề INSTEAD OF)

Các loại trigger trong SQL server là gì?

Các loại trigger trong SQL server là gì
Trong sql có hai loại trigger chính: AFTER trigger và INSTEAD OF trigger.

Trong SQL Server và nhiều hệ quản lý cơ sở dữ liệu khác, có hai loại trigger chính: AFTER trigger và INSTEAD OF trigger.

AFTER Trigger

Trigger này chạy sau khi thực hiện hành động INSERT, UPDATE, hoặc DELETE.

Cú pháp:

CREATE TRIGGER trigger_name ON table_name AFTER INSERT, UPDATE, DELETE AS — Trigger body

Ví dụ:

CREATE TRIGGER tr_after_insert ON dbo.Employee AFTER INSERT AS BEGIN — Trigger body — Các lệnh xử lý sau khi có sự kiện INSERT trên bảng dbo.Employee END;

INSTEAD OF Trigger

Trigger này thay thế cho hành động INSERT, UPDATE, hoặc DELETE mặc định và chạy thay thế hành động đó.

Cú pháp:

CREATE TRIGGER trigger_name ON table_name INSTEAD OF INSERT, UPDATE, DELETE AS — Trigger body

Ví dụ:

CREATE TRIGGER tr_instead_of_delete ON dbo.Employee INSTEAD OF DELETE AS BEGIN — Trigger body — Thực hiện logic tùy chỉnh thay thế cho DELETE mặc định END;

Câu lệnh create trigger insert trong SQL server là gì?

Đây là cú pháp cơ bản của một câu lệnh CREATE TRIGGER để tạo một trigger MSSQL cho sự kiện INSERT trong SQL Server:

CREATE TRIGGER trigger_name ON table_name AFTER INSERT AS BEGIN — Trigger body — Các lệnh xử lý khi có sự kiện INSERT trên bảng table_name END;

Trong đó:

  • trigger_name là tên của trigger bạn đang tạo.
  • table_name là tên của bảng mà trigger sẽ được áp dụng.
  • AFTER INSERT chỉ định rằng trigger này sẽ chạy sau khi có sự kiện INSERT được thực hiện.

Kết lại

Trên đây là toàn bộ chia sẻ của Comdy về trigger in sql server. Hi vọng thông tin trong bài viết này là bổ ích và có ý nghĩa với mọi người. Xin cám ơn.

Từ khóa » Cú Pháp Trigger Trong Sql