반응형
현재 트랜잭션 수준을 찾는 방법
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
상수 값에 대한 learn.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
격리 레벨의 옵션을 찾습니다.설정되어 있지 않으면 커밋된 것으로 읽힙니다.
SELECT CASE
WHEN transaction_isolation_level = 0 THEN 'Unspecified'
WHEN transaction_isolation_level = 1 THEN 'Read Uncommitted'
WHEN transaction_isolation_level = 2 AND d.snapshot_isolation_state_desc = 'OFF' THEN 'Read Committed'
WHEN transaction_isolation_level = 2 AND d.snapshot_isolation_state_desc = 'ON' AND d.is_read_committed_snapshot_on = 1 THEN 'Snapshot Read Committed'
WHEN transaction_isolation_level = 2 AND d.snapshot_isolation_state_desc = 'ON' AND d.is_read_committed_snapshot_on = 0 THEN 'Snapshot'
WHEN transaction_isolation_level = 3 THEN 'Repeatable Read'
WHEN transaction_isolation_level = 4 THEN 'Serializable' END AS TRANSACTION_ISOLATION_LEVEL,
d.is_read_committed_snapshot_on,
d.snapshot_isolation_state_desc
FROM sys.dm_exec_sessions
CROSS JOIN sys.databases AS d
where session_id = @@SPID
AND d.database_id = DB_ID();
언급URL : https://stackoverflow.com/questions/1038113/how-to-find-current-transaction-level
반응형
'programing' 카테고리의 다른 글
SQL 서버에서 NULL = NULL이 false로 평가되는 이유 (0) | 2023.04.07 |
---|---|
WCF 클라이언트의 블록 사용 문제에 대한 최선의 회피책은 무엇입니까? (0) | 2023.04.07 |
저장 프로시저에서 선택하는 방법 (0) | 2023.04.07 |
임시 테이블이 있는지 확인하고 임시 테이블을 만들기 전에 해당 테이블이 있으면 삭제하십시오. (0) | 2023.04.07 |
LIKE 절에서 대괄호를 이스케이프하려면 어떻게 해야 합니까? (0) | 2023.04.07 |