2009-06-24 14 views

Respuesta

180

Ejecutar este:

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

Éste sí funciona en SQL Azure :-) – Ronny

+5

Éste no es exacto si el nivel de aislamiento es" read_commited_snapshot ". En este caso, solo mostrará "Readcommited". – GaTechThomas

+2

@GaTechThomas, 'READ_COMMITTED_SNAPSHOT' no es el nivel de aislamiento, es la opción de una base de datos que permite cambiar el comportamiento del' para toda la base –

8

Si está hablando de la transacción actual anidando nivel, entonces usaría @@TRANCOUNT.

Si usted está hablando de transacción nivel de aislamiento, utilice DBCC USEROPTIONS y buscar una opción de nivel de aislamiento . Si no está configurado, es leer confirmado.

+5

También hay que tener en cuenta DBCC USEROPTIONS es una opción increíble para encontrar el nivel de aislamiento de su SESIÓN, pero puede ser complicado: si su código cambia el nivel de aislamiento por transacción, esos períodos de tiempo donde el aislamiento el nivel es diferente de la sesión predeterminada puede ser difícil de capturar. Por ejemplo, si abre su sesión con el nivel de aislamiento x, pero cambia el nivel de aislamiento a y durante la duración de una transacción específica dentro de la sesión, los USEROPTIONS de DBCC no le darán visibilidad si se llama fuera de esa transacción. – DCaugs

+1

En SQL Server 2012 el "nivel de aislamiento" de 'DBCC USEROPTIONS' se establece en" read committed " –

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

Éste no funciona en SQL Azure – Ronny

+0

+1 ya que también imprime 'snapshot' cuando se usa junto con w/read cometido (y no el mecanismo de bloqueo compartido predeterminado) –

+0

esto es exagerado, solo haga USUARIOS DBCC como thiagoh dice – 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

Por favor, también elabore en el código para ser más educativo. – lpapp

23

basta con ejecutar DBCC useroptions y obtendrá algo como esto:

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

y señala "leer instantánea confirmada" cuando está activo (ver instantánea RC vs bloqueado), al menos en SQL Server 2008 – user1075613

Cuestiones relacionadas