2009-06-24 8 views

Répondre

180

Exécuter ceci:

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

Celui-ci fonctionne dans SQL Azure :-) – Ronny

+5

Celui-ci n'est pas précis si le niveau d'isolement est "read_commited_snapshot". Dans ce cas, il affichera uniquement "Readcommited". – GaTechThomas

+2

@GaTechThomas, 'READ_COMMITTED_SNAPSHOT' n'est pas le niveau d'isolement, il est l'option d'une base de données permettant de modifier le comportement de' base de données à l'échelle de niveau d'isolement ReadDCommitted' –

8

Si vous parlez de la transaction en cours nichée niveau, alors vous utiliserez @@TRANCOUNT.

Si vous parlez de niveau isolement transaction , utilisez DBCC USEROPTIONS et chercher une option de niveau d'isolation . Si ce n'est pas le cas, c'est en lecture confirmée.

+5

Gardez à l'esprit DBCC UserOptions est une option formidable pour trouver niveau d'isolation de votre session, mais il peut être difficile - si votre code change le niveau d'isolement par transaction, ces périodes de temps où l'isolement niveau est différent de la session par défaut peut être difficile à capturer. Par exemple, si vous ouvrez votre session avec le niveau d'isolation x, mais changez le niveau d'isolation en y pour la durée d'une transaction spécifique dans la session, DBCC USEROPTIONS ne vous donnera pas de visibilité si elle est appelée en dehors de cette transaction. – DCaugs

+1

Dans SQL Server 2012 "niveau d'isolement" de "DBCC USEROPTIONS" est défini sur "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

Celui-ci ne fonctionne pas dans SQL Azure – Ronny

+0

+1 car il imprime également 'snapshot' lorsqu'il est utilisé avec w/read commit (et non le mécanisme de verrouillage partagé par défaut) –

+0

c'est trop, faites DBCC USEROPTIONS comme dit thiagoh – 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

S'il vous plaît également élaborer sur le code pour être plus éducatif. – lpapp

23

il suffit d'exécuter DBCC useroptions et vous obtiendrez quelque chose comme ceci:

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

et il indique "read commit snapshot" lorsqu'il est actif (voir snapshot RC vs verrouillé), au moins sur SQL Server 2008 – user1075613

Questions connexes