복붙노트

[SQL] 어떻게 현재의 트랜잭션 (transaction) 레벨을 찾는 방법은?

SQL

어떻게 현재의 트랜잭션 (transaction) 레벨을 찾는 방법은?

어떻게 SQL Server에서 현재 데이터베이스 트랜잭션 수준에서 찾을 수 있습니까?

해결법

  1. ==============================

    1.이 프로그램을 실행 :

    이 프로그램을 실행 :

    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
    

    상수의 값 docs.microsoft.com 참조.

  2. ==============================

    2.단지 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
    
  3. ==============================

    3.

    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. ==============================

    4.

    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
    
  5. ==============================

    5.현재 트랜잭션 중첩 수준에 대해 이야기하는 경우에, 당신은 @@ TRANCOUNT를 사용합니다.

    현재 트랜잭션 중첩 수준에 대해 이야기하는 경우에, 당신은 @@ TRANCOUNT를 사용합니다.

    당신은 트랜잭션 격리 수준에 대해 이야기하는 경우, 분리 레벨의 옵션에 대해 DBCC USEROPTIONS과 모양을 사용합니다. 이 설정되지 않은 경우, 그것의 읽기 최선을 다하고 있습니다.

  6. from https://stackoverflow.com/questions/1038113/how-to-find-current-transaction-level by cc-by-sa and MIT license