Sự khác biệt giữa kích hoạt FOR và SAU?


Câu trả lời:


153

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 OFkí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.


14
Tôi thích nhận xét về việc chèn vào lượt xem bằng cách sử dụng trình kích hoạt. Thông tin rất hữu ích. Chúc mừng.
Mariusz

Xin lỗi Mister @Ben, Kịch bản để chèn vào một khung nhìn là gì? Cảm ơn ^ - ^
Jeancarlo Fontalvo.

@JeancarloFontalvo, 1) khả năng tương thích. Các bảng bên dưới có thể thay đổi miễn là chế độ xem vẫn giữ nguyên. 2) kiểm soát truy cập, một số người dùng nhất định chỉ có quyền ghi vào một số cột nhất định.
Ben

17

@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.


4

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


1
Cụm từ "AFTER này là mặc định khi FOR là từ khóa duy nhất được chỉ định." là rất khó hiểu. Họ có thể nói nó tốt hơn.
FMFF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.