C#에서 두 개의 스레드를 만들고 두 개의 별도 함수를 병렬로 호출하고 있습니다. 두 함수 모두 XYZ 테이블에서 마지막 ID를 읽고 값 ID + 1 인 새 레코드를 삽입합니다. 여기서 ID 열은 기본 키입니다. 두 함수를 모두 실행할 때 기본 키 위반 오류가 발생합니다. 두 함수 모두 다음과 같은 쿼리를 가지고 있습니다 :SQL Server 2008의 기본 키 위반 오류
insert into XYZ values((SELECT max(ID)+1 from XYZ),'Name')
두 함수 모두 한 번에 값을 읽고 같은 값으로 삽입하려고합니다. 어떻게하면이 문제를 해결할 수 있습니까?
음 :
는 내가 틀렸다면 그래서 희망 누군가가 편집을 제안합니다, 너무 자주 이러한 기능을 사용하지 않는,하지만 당신은 이들 중 하나를 원하는 Java는 여러 스레드가 서로 간섭하지 않도록 동기화 된 키워드를가집니다. C#의 유사 구조에 대한 멀티 스레딩 링크를 찾아 보시기를 권합니다. –
@ChetterHummin 아니요, 문제는 응용 프로그램에 삽입 할 ID를 알아 내려고 시도하고 있다는 것입니다. 예, 그는 또한 ID 변수를 공유하고 동기화 할 수는 있지만 데이터베이스 동기화 문제를 막지는 못합니다. 예를 들어, 자신의 테이블에 자신의 공유 변수를 사용하지 않는 제 3자가 삽입하는 문제를 생각해보십시오. 그렇다면 그는 여전히 같은 문제가 있습니다. – KyleM
@KyleM 설명해 주셔서 감사합니다! 위의 –