SQL Server의 중첩 트랜잭션에서 격리 범위는 얼마입니까?
-
03-07-2019 - |
문제
다음 SQL을 고려하십시오.
BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED INSERT Bands ( Name ) SELECT 'Depeche Mode' UNION SELECT 'Arcade Fire' -- I've indented the inner transaction to make it clearer. BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM Bands COMMIT -- What is the isolation level right here? UPDATE Bands SET Name = 'Modest Mouse' WHERE Name = 'Oddest House' COMMIT
요약하면, 우리는 거래를 시작하고 격리 수준을 READ COMMITTED
. 그런 다음 임의의 SQL을 수행하고 중첩 된 트랜잭션을 시작합니다. 이 거래에서 우리는 격리 수준을 변경합니다 READ UNCOMMITTED
. 그런 다음 그 거래를 저지르고 다른 거래로 돌아갑니다.
이제 내 추측은 내부 커밋 후 격리 수준이 READ COMMITTED
. 이 올바른지?
해결책
나는 그것이 옳다고 생각하지 않습니다.
여기를 참조하십시오. 트랜잭션을 설정하십시오
한 번에 격리 레벨 옵션 중 하나만 설정할 수 있으며 명시 적으로 변경 될 때까지 해당 연결을 위해 설정되어 있습니다.
다른 팁
당신은 [Bob Probst]가 정확합니다. 흥미롭게도 선적 서류 비치 링크 :
저장된 프로 시저 또는 트리거에서 설정 세트 트랜잭션 격리 레벨을 발행하는 경우, 객체가 반환되면 객체가 호출 될 때 분리 레벨이 유효한 레벨로 재설정됩니다. 예를 들어, 배치로 반복 가능한 읽기를 설정하고 배치를 한 번 분리 레벨을 직렬화 가능한 것으로 설정하는 저장 프로 시저를 호출하면 저장된 프로 시저가 배치로 제어를 반환 할 때 격리 레벨 설정이 반복 가능한 읽기로 되돌아갑니다.
그래서 여기서 결론은 세트 트랜잭션 격리 수준이 절차 친화력, 아니다 거래 친화력 (내가 생각했듯이).
대박!
제휴하지 않습니다 StackOverflow