2009-06-24 4 views

答えて

180

を実行し、この:

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

これはSQL Azureで動作します:-) – Ronny

+5

分離レベルが "read_commited_snapshot"の場合、これは正確ではありません。この場合、「Readcommited」のみが表示されます。 – GaTechThomas

+2

@GaTechThomas、 'READ_COMMITTED_SNAPSHOT'は分離レベルではなく、' ReadDCommitted'分離レベルデータベース全体の動作を変更できるデータベースオプションです。 –

8

のネストのレベルについては、@@TRANCOUNTを使用します。

トランザクション分離レベルの話をしている場合は、DBCC USEROPTIONSを使用して分離レベルのオプションを探します。設定されていない場合は、がコミットされました。です。

+5

はまた、心に留めておくとあなたのセッションの分離レベルですが、それは扱いにくいことがあります - あなたのコードがトランザクションごとの分離レベルを変更した場合、分離レベルがセッションのデフォルトと異なる場合は、キャプチャするのが難しい場合があります。たとえば、分離レベルxでセッションを開き、セッション内の特定のトランザクションの期間、分離レベルをyに変更すると、DBCC USEROPTIONSは、そのトランザクション外で呼び出された場合、そのセッションを表示しません。 – DCaugs

+1

SQL Server 2012で「DBCC USEROPTIONS」の「分離レベル」が「読み取りコミット」に設定されています –

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

これはSQL Azure – Ronny

+0

+1で動作しません。その理由は、コミットされたままで(デフォルトの共有ロックメカニズムではなく)使用されているときに 'スナップショット'も表示されるからです。 –

+0

これは過剰です。thaagohは – 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

より教育的になるようにコードを詳述してください。 – lpapp

23

だけDBCC useroptionsを実行して、あなたはこのような何か買ってあげる:DBCC USEROPTIONSを見つけるための素晴らしいオプションです

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

と、少なくともSQL Server 2008の場合は、アクティブになったときに「読み込まれたスナップショット」が読み取られます(RCスナップショットとロックを参照) – user1075613

関連する問題