2009-06-24 54 views

Trả lời

180

Run này:

SELECT CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'ReadUncommitted' 
WHEN 2 THEN 'ReadCommitted' 
WHEN 3 THEN 'Repeatable' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL 
FROM sys.dm_exec_sessions 
where session_id = @@SPID 
+3

Điều này làm việc trong SQL Azure :-) – Ronny

+5

Điều này không chính xác nếu mức cách ly là" read_commited_snapshot ". Trong trường hợp này, nó sẽ chỉ hiển thị "Đã đọc". – GaTechThomas

+2

@GaTechThomas, 'READ_COMMITTED_SNAPSHOT' không phải là mức cô lập, nó là tùy chọn của cơ sở dữ liệu cho phép thay đổi hành vi của' ReadDCommitted' cấp độ cơ sở dữ liệu rộng –

8

Nếu bạn đang nói về giao dịch hiện tại làm tổ mức, thì bạn sẽ sử dụng @@TRANCOUNT.

Nếu bạn đang nói về giao dịch ly cấp, sử dụng DBCC USEROPTIONS và tìm kiếm một lựa chọn cô lập mức. Nếu chưa được đặt, số đó là đã đọc cam kết.

+5

Cũng nên nhớ DBCC USEROPTIONS là một lựa chọn tuyệt vời cho việc tìm kiếm mức độ cô lập của SESSION, nhưng nó có thể phức tạp - nếu mã của bạn thay đổi mức cô lập cho mỗi giao dịch, những khoảng thời gian mà sự cô lập mức độ khác với phiên mặc định có thể khó chụp. Ví dụ, nếu bạn mở phiên của bạn với mức cô lập x, nhưng thay đổi mức cách ly thành y trong khoảng thời gian của một giao dịch cụ thể trong phiên, thì DBCC USEROPTIONS sẽ không cho bạn khả năng hiển thị nếu được gọi bên ngoài giao dịch đó. – DCaugs

+1

Trong SQL Server 2012 "mức cô lập" của 'DBCC USEROPTIONS' được đặt thành" đọc cam kết " –

20
DECLARE @UserOptions TABLE(SetOption varchar(100), Value varchar(100)) 
DECLARE @IsolationLevel varchar(100) 

INSERT @UserOptions 
EXEC('DBCC USEROPTIONS WITH NO_INFOMSGS') 

SELECT @IsolationLevel = Value 
FROM  @UserOptions 
WHERE  SetOption = 'isolation level' 

-- Do whatever you want with the variable here... 
PRINT  @IsolationLevel 
+1

Cái này không hoạt động trong SQL Azure – Ronny

+0

+1 vì nó cũng được in 'snapshot' khi nó được sử dụng cùng với w/read commit (và không phải là cơ chế khóa mặc định) –

+0

đây là quá mức cần thiết, chỉ cần làm DBCC USEROPTIONS như thiagoh nói – user1075613

16
SELECT CASE 
      WHEN transaction_isolation_level = 1 
      THEN 'READ UNCOMMITTED' 
      WHEN transaction_isolation_level = 2 
       AND is_read_committed_snapshot_on = 1 
      THEN 'READ COMMITTED SNAPSHOT' 
      WHEN transaction_isolation_level = 2 
       AND is_read_committed_snapshot_on = 0 THEN 'READ COMMITTED' 
      WHEN transaction_isolation_level = 3 
      THEN 'REPEATABLE READ' 
      WHEN transaction_isolation_level = 4 
      THEN 'SERIALIZABLE' 
      WHEN transaction_isolation_level = 5 
      THEN 'SNAPSHOT' 
      ELSE NULL 
     END AS TRANSACTION_ISOLATION_LEVEL 
FROM sys.dm_exec_sessions AS s 
     CROSS JOIN sys.databases AS d 
WHERE session_id = @@SPID 
    AND d.database_id = DB_ID(); 
+4

Ngoài ra, hãy xây dựng mã để mang tính giáo dục hơn. – lpapp

23

chỉ cần chạy DBCC useroptions và bạn sẽ nhận được một cái gì đó như thế này:

Set Option     Value 
--------------------------- -------------- 
textsize     2147483647 
language     us_english 
dateformat     mdy 
datefirst     7 
lock_timeout    -1 
quoted_identifier   SET 
arithabort     SET 
ansi_null_dflt_on   SET 
ansi_warnings    SET 
ansi_padding    SET 
ansi_nulls     SET 
concat_null_yields_null  SET 
isolation level    read committed 
+0

và nó chỉ ra "đọc snapshot cam kết" khi hoạt động (xem RC snapshot vs locked), ít nhất là trên SQL Server 2008 – user1075613

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