SQL Server 2005 mới intoduced cách để rollback giao dịch trong SQL Server 2005
SET XACT_ABORT VỀ
khi XACT_ABORT là trên. Các báo cáo T-SQL sẽ tự động rollback giao dịch khi lỗi xảy ra trong báo cáo.
SET XACT_ABORT VỀ
SỬ DỤNG Emp
Bắt đầu Trần
Chèn vào giá trị EmpInfo(1)
Chèn vào giá trị EmpInfo(1) — Tuyên bố này sẽ nâng cao các lỗi tiểu học trọng điểm
Chèn vào giá trị EmpInfo(2)
Cam kết Trần
Dòng đầu tiên tuyên bố sẽ thực hiện mà không có bất kỳ lỗi nào. Các lỗi khóa chính sẽ tăng trong dòng thứ hai. Tuy nhiên, giao dịch toàn bộ khối sẽ không được cam kết bởi vì XACT_ABORT trong ngày.
Bạn nên lưu ý rằng XACT_ABORT chấm dứt hàng loạt * *, không phải là toàn bộ lệnh. Lô được phân cách với các từ khóa GO. Thực hiện sẽ tiếp tục vào lúc bắt đầu của hàng loạt tiếp theo.
Tính năng này cũng có trong SQL Server 2000, mặc dù nó cư xử hơi khác nhau cho các lỗi khác nhau.
Trong SQL 2000, có những trường hợp nơi XACT_ABORT không rollback các giao dịch tự động.
Ví dụ:
Chèn vào một tên cột không hợp lệ.
Chèn vào một khóa chính với IDENTITY_INSERT OFF.
Thực hiện một SELECT có sử dụng một UDF không tồn tại.
Các loại lỗi thường là do một lệnh kém tác giả, vì vậy họ không xảy ra trong hoạt động ngày-to-ngày của chương trình của bạn trừ khi ai đó làm thay đổi giản đồ. Nhưng tôi cho khả năng của họ khi tác giả kịch bản cập nhật cơ sở dữ liệu khi triển khai một phiên bản mới của một dự án, chỉ trong trường hợp triển khai không đi theo kế hoạch.
Có nhiều cách để xử lý các lỗi này. COMMIT của bạn phải ở trong hàng loạt thực hiện báo cáo DML. Sau khi hàng loạt (sau khi từ khóa GO) bạn có thể kiểm tra @ @ TRANCOUNT để xem nếu nó lớn hơn không và hành động phù hợp. Thông thường các giao dịch ROLLBACK.
Giao dịch có thể chiều dài lô, vì vậy bạn có thể thực hiện một rollback trong một lô hàng tiếp theo.