Trong SQL Server 2008, tôi đang sử dụng một mô hình như thế này:giao dịch vẫn còn mở sau khi huỷ truy vấn
begin transaction
begin try
/* do something */
end try
begin catch
if @@TRANCOUNT > 0
rollback
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity,1)
end catch
if @@TRANCOUNT > 0
commit transaction
khi tôi nhấn "Cancel Thực thi truy vấn" nút trên Sql Server Management Studio nó hủy bỏ các truy vấn và lá giao dịch mở.
Đây có phải là hành vi dự định không? Hoặc là có một sai lầm trong mô hình của tôi. Nó có nên khôi phục lại giao dịch không?
Xem câu trả lời cập nhật –
Câu trả lời này dường như đã tránh được tinh thần của câu hỏi ... Câu hỏi có thể được lặp lại là "Tại sao hủy truy vấn không kích hoạt khối" bắt "của cấu trúc try/catch?" Nếu đây là hành vi dự định, tại sao? Là một nhà thiết kế của proc đó, tôi mong đợi proc hoàn thành thành công hoặc rollback - ngữ nghĩa ngụ ý của try/catch không cho phép "ngừng thực thi nhưng đừng lo lắng về khối catch, và để giao dịch mở cho đến khi máy chủ SQL quyết định làm sạch các trasaction sau khi ngắt kết nối "... Một hành vi sane sẽ được nâng cao một" lỗi hủy bỏ ", chắc chắn? – Tao
@Tao Có lẽ bạn nói đúng, nhưng tác giả đã chấp nhận câu trả lời, làm ơn đừng nghĩ cho anh ta. –