Sự khác biệt giữa trình kích hoạt FOR
và AFTER
trình kích hoạt là gì?
Sự khác biệt giữa trình kích hoạt FOR
và AFTER
trình kích hoạt là gì?
Câu trả lời:
Không có sự khác biệt, họ làm điều tương tự.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Giống như
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
Một trình INSTEAD OF
kích hoạt thì khác và kích hoạt trước và thay vì chèn và có thể được sử dụng trên các dạng xem, để chèn các giá trị thích hợp vào các bảng bên dưới.
@Ben hoàn toàn đúng.
Đây là bài viết MSDN Khám phá kích hoạt SQL Server
Một đoạn từ bài báo:
Cú pháp đó cũng được chấp nhận trong các phiên bản SQL Server cũ hơn. Tuy nhiên, bây giờ có hai loại trình kích hoạt trong SQL Server 2000, tôi muốn gọi trình kích hoạt FOR là trình kích hoạt SAU. Vì vậy, trong phần còn lại của bài viết này, tôi sẽ đề cập đến trình kích hoạt SAU hoặc INSTEAD OF.
Giống như trình kích hoạt SAU mà bạn đã thấy trước đó, trình kích hoạt này ngăn các thay đổi được thực hiện đối với trường họ. Tuy nhiên, nó thực hiện quy tắc kinh doanh này khác với ví dụ trước. Vì trình kích hoạt INSTEAD OF kích hoạt thay cho câu lệnh UPDATE, trình kích hoạt INSTEAD OF sau đó sẽ đánh giá xem thử nghiệm quy tắc nghiệp vụ có vượt qua hay không. Nếu kiểm tra quy tắc nghiệp vụ vượt qua, để cập nhật xảy ra, trình kích hoạt INSTEAD OF phải gọi lại rõ ràng câu lệnh UPDATE.
AFTER chỉ định rằng trình kích hoạt DML chỉ được kích hoạt khi tất cả các hoạt động được chỉ định trong câu lệnh SQL kích hoạt đã thực thi thành công. Tất cả các hành động phân tầng tham chiếu và kiểm tra ràng buộc cũng phải thành công trước khi trình kích hoạt này kích hoạt. AFTER là mặc định khi FOR là từ khóa duy nhất được chỉ định.
SAU KHI không thể xác định trình kích hoạt trên các chế độ xem.
INSTEAD OF Chỉ định rằng trình kích hoạt DML được thực thi thay vì câu lệnh SQL kích hoạt, do đó, ghi đè các hành động của câu lệnh kích hoạt. INSTEAD OF không thể được chỉ định cho các trình kích hoạt DDL hoặc đăng nhập.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql