2012-01-03 26 views
6

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?

Trả lời

9

IMHO, đó là hành vi dự định. Khi bạn hủy truy vấn đang chạy nếu có giao dịch mở - nó vẫn mở cho đến khi bạn cam kết hoặc cuộn lại một cách rõ ràng HOẶC cho đến khi kết nối không được đóng

Không có bất kỳ lỗi nào có giá trị trong mẫu của bạn. Nếu bạn kiểm soát luồng thực thi theo cách thủ công (Cancel Executing Query), thì bạn nên quan tâm đến các giao dịch đã mở theo cách tương tự - theo cách thủ công.

Cập nhật:

Các hành vi được điều khiển bởi SSMS tùy chọn Ngắt kết nối sau khi truy vấn thực hiện - có nghĩa là ngắt kết nối truy vấn sau khi thực hiện hoặc hủy bỏ và cuộn giao dịch trở lại mở:

+0

Xem câu trả lời cập nhật –

+2

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

+0

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

Các vấn đề liên quan