안녕하세요.
해당 쿼리에 대한 동시 호출 시 읽기에 대한 보존이 되는지 궁금합니다.
밑에 한 트랜잭션입니다. 동시호출시 두번째 select가 update된 0값이 조회되는게 아니라
첫번째 select와 마찬가지로 1000을 호출이 되어버려서 결국엔 col2값이 2000이 되어버립니다.
정상적으로 처리됐을땐 col2값이 1000이되어야합니다.
트랜잭션 처리가 되있더라도 공유잠금은 되지 않는것같습니다.
어떻게 처리해야될까요..
col1 : 1000
SELECT col1
FROM TEST with(nolock) where seq = 1
col1 : 0으로 초기화 및 col2 에다 col1값 업데이트
update TEST with(serializable) set col1 = 0, col2 = 조회된col1값
where seq = 1
답변 부탁드립니다.
질문이 잘 이해되지 않는 군요.
위의 쿼리는 아래와 같이 하나의 트랜젝션에 묶여 있나요?
그렇다면 아래처럼 처리하면 될것 같습니다.
declare @col1 int
begin tran
select @col1 = col1
from dbo.test with(updlock)
where seq = 1
update a
set col1 = 0
, col2 = @col1
from dbo.test as a
where seq = 1
commit tran