저장 프로 시저의 삽입에 동시성 문제가 있습니다. 절차의 관련 부분은 다음과 같습니다.
select @_id = Id from table1 where othervalue = @_othervalue
IF( @_id IS NULL)
BEGIN
insert into table1 (othervalue) values (@_othervalue)
select @_id = Id from table1 where othervalue = @_othervalue
END
이러한 저장 프로 시저 중 3 또는 4를 동시에 실행하면 경우에 따라 여러 개의 삽입이 발생합니다.
나는 이것을 이렇게 고칠 계획이다.
insert into table1 (othervalue)
select TOP(1) @_othervalue as othervalue from table1 WITH(UPDLOCK)
where NOT EXISTS ( select * from table1 where othervalue = @_othervalue )
select @_id = Id from table1 where othervalue = @_othervalue
문제는 SQL 서버에서 중복없이 동시에 삽입하는 방법입니까? 한 번만 삽입하기 위해 TOP을 사용해야한다는 사실이 저를 방해합니다.
1
TOP을 사용할 필요는 없습니다. SELECT 문에서 FROM 테이블 참조를 제거하십시오.
—
ErikE
@ GSerg 나는 당신이 맞다고 생각합니다.
—
Chris