Nó phụ thuộc vào mức đệ quy cho các trình kích hoạt hiện được đặt trên DB.
Nếu bạn làm điều này:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Hoặc cái này:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Trình kích hoạt ở trên sẽ không được gọi lại và bạn sẽ an toàn (trừ khi bạn gặp phải một số loại bế tắc; điều đó có thể xảy ra nhưng có lẽ tôi đã nhầm).
Tuy nhiên, tôi không nghĩ rằng đây là một ý tưởng tốt. Một tùy chọn tốt hơn sẽ là sử dụng INSTEAD OF trigger . Bằng cách đó, bạn sẽ tránh thực hiện bản cập nhật đầu tiên (thủ công) qua DB. Chỉ cái được xác định bên trong trình kích hoạt mới được thực thi.
Trình kích hoạt INSTEAD OF INSERT sẽ giống như sau:
CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO part_numbers (
colA,
colB,
part_description
) SELECT
colA,
colB,
UPPER(part_description)
) FROM
INSERTED
END
GO
Điều này sẽ tự động "thay thế" câu lệnh INSERT ban đầu bằng câu lệnh này, với lệnh gọi UPPER rõ ràng được áp dụng cho part_description
trường.
Trình kích hoạt INSTEAD OF UPDATE sẽ tương tự (và tôi không khuyên bạn nên tạo một trình kích hoạt duy nhất, hãy tách chúng ra).
Ngoài ra, địa chỉ này đề cập đến nhận xét @Martin:nó hoạt động với nhiều lần chèn / cập nhật (ví dụ của bạn thì không).