[sql] 현재 거래 수준을 찾는 방법은 무엇입니까?

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



답변

이것을 실행하십시오 :

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 참조 .


답변

그냥 실행 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


답변

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();


답변

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


답변

현재 트랜잭션 중첩 수준 에 대해 이야기하고 있다면@@TRANCOUNT 합니다.

당신은 트랜잭션에 대해 이야기하는 경우 격리 수준, 사용 DBCC USEROPTIONS의 옵션과 모양 격리 수준 . 설정되어 있지 않은 경우는 commit commit 입니다.


답변