2011-11-02 30 views
11

Nếu ngay sau BEGIN Tôi có tuyên bố SET TRANSACTION ISOLATION LEVEL ..., liệu mức giao dịch đã cho có hiệu lực cho toàn bộ phạm vi của quy trình được lưu trữ bất kể tôi có sử dụng BEGIN TRANSACTION hay không? Cụ thể là nếu tôi có các câu lệnh đơn giản là SELECT, được định nghĩa nguyên tử/giao dịch theo định nghĩa, thì mức giao dịch mặc định cho chúng có được đặt thành giá trị đã cho không?SQL Server: làm thế nào để thiết lập mức cô lập mặc định cho toàn bộ thủ tục lưu sẵn?

BEGIN 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
-- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED 
SELECT * FROM T 
END 

Trả lời

11

Đầu tiên, mức cô lập mặc định trong SQL Server được đọc Cam kết, vì vậy câu lệnh không thực sự làm gì trừ khi bạn đã thay đổi mức cách ly mặc định.

Nhưng, nói chung, vâng, SET giao dịch Isolation Cấp sẽ thay đổi mức độ cô lập cho toàn bộ thủ tục (trong suốt thời gian kết nối, trên thực tế)

Hãy ghi nhớ rằng tất cả các câu lệnh SQL là giao dịch ngầm nghĩa là nếu, ví dụ, bản cập nhật không thành công 99%, nó sẽ tự động khôi phục; không cần BEGIN TRAN/COMMIT.

Để trả lời câu hỏi của bạn, có, câu lệnh SELECT sẽ kế thừa cấp cách ly bạn đặt (hoặc mặc định nếu bạn không đặt) trừ khi bạn ghi đè hành vi bằng gợi ý truy vấn như WITH NOLOCK. như thể bạn đã làm SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

+3

[Nó không thay đổi nó trong khoảng thời gian kết nối như được hiển thị ở đây] (http://stackoverflow.com/questions/7507714/sql-server-2005-transaction-level-and-stored -procedures/7507829 # 7507829) –

+0

@magicmike: cảm ơn! Tôi chấp nhận nó như là câu trả lời nhưng nó sẽ tốt hơn nếu bạn có thể chỉ cho tôi một tài liệu MS. – Schultz9999

+1

nếu nó giúp: 'THIẾT LẬP GIAO DIỆN CẤP B --NG '- http://msdn.microsoft.com/en-us/library/ms173763.aspx Giao dịch Implicit: - http://msdn.microsoft.com/en-us/library /ms188317.aspx –

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