Kích hoạt kết hợp với giao dịch


25

Giả sử chúng ta có tình huống sau:

Chúng tôi có một bảng (giả sử Table_A), có một kích hoạt trên INSERT. Công việc kích hoạt là cập nhật một số hàng table_Bdựa trên các giá trị được chèn vào table_A.

Bây giờ, mọi thứ đều ổn khi chúng ta đơn giản chèn một hàng vào bảng, nhưng còn tình huống chúng ta chèn dữ liệu qua giao dịch thì sao? Liệu trình kích hoạt sẽ đợi cho đến khi tất cả các câu lệnh giao dịch chạy thành công, hoặc nó sẽ được kích hoạt ngay khi nó nhận ra phần chèn?. Nếu kích hoạt kích hoạt ngay lập tức khi nó nhận ra lần chèn đầu tiên, điều gì sẽ xảy ra nếu giao dịch thất bại ở hàng cuối cùng?. Có một số cơ chế cho tình huống đó?.

Câu trả lời:


37

Một chèn luôn trong một giao dịch.

Nếu bạn không có một tuyên bố rõ ràng BEGIN TRAN ... COMMIThoặc SET IMPLICIT_TRANSACTIONS ONsau đó tuyên bố sẽ chạy như một giao dịch cam kết tự động khép kín .

Trình kích hoạt luôn là một phần của giao dịch cho hành động kích hoạt trình kích hoạt. Nếu xảy ra lỗi trong trình kích hoạt gây ra khôi phục giao dịch thì hành động bắn cũng sẽ được khôi phục.

Triggers ngầm có XACT_ABORTtrên. Một lỗi với cài đặt này sẽ tự động dẫn đến khôi phục giao dịch (ngoại trừ các lỗi được nêu trong mã với RAISERRORcâu lệnh).

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.