최근에 Advantage Database Server를 백엔드로 사용하는 시스템 지원을 담당했습니다. 몇 가지 배경으로, 나는 수년간의 데이터베이스 경험을 가지고 있지만 지금까지 ADS를 사용해 본 적이 없으므로이 질문에 대한 순수한 질문은이 특정 DBMS에서 표준 패턴을 구현하는 방법에 관한 것입니다.Advantage Database Server에서 고유 대리 키 구현
는 이전에이 방식으로 ID 열을 관리하는 개발 된 저장 프로 시저있다 :
@ID = (SELECT ISNULL(MAX(ID), 0) FROM ExampleTable);
@ID = @ID + 1;
INSERT INTO Example_Table (ID, OtherStuff)
VALUES (@ID, 'Things');
--Do some other stuff.
UPDATE ExampleTable
SET AnotherColumn = 'FOO'
WHERE ID = @ID;
내 문제는 내가 지금 병렬로이 저장 프로 시저를 여러 번 실행해야한다는 것입니다. 당신이 상상할 수 있듯이, 내가 이것을 할 때, 동일한 ID 값이 여러 번 부여 잡히고있다.
내가 필요한 것은 일관된 저장 프로 시저를 여러 번 실행하더라도 고유 한 값을 일관되게 만들 수있는 방법입니다. SQL 서버에서 나는 ID라는 IDENTITY
열을 만든 후 다음을 수행 할 수 :
INSERT INTO ExampleTable (OtherStuff)
VALUES ('Things');
SET @ID = SCOPE_IDENTITY();
ADS를 비슷한 것 같다 autoinc
을 가지고,하지만 난 아무것도 결정적으로 새로 값을 반환하는 방법을 말해 찾을 수 없습니다 100 % 확신 할 수있는 방식으로 생성 된 가치는 동시 사용에서 정확합니다. ADS Developer 's Guide는 실제로 autoinc
사용에 대해 경고하고 온라인 도움말 파일은 마지막으로 생성 된 autoinc ID를 검색하는 것처럼 보이는 기능을 제공합니다. (이는 내가 원한 것이 아닙니다. 마지막 문장이 아닌 이전 명령문에서 작성한 것을 원합니다. 모든 세션에서 생성됨). 도움말 파일에는 동시성과 관련된 상황에서 올바르게 작동하지 않을 수도있는 경고와 함께이 기능이 나열되어 있습니다.
어떻게 이것을 ADS에 구현할 수 있습니까? autoinc
을 사용해야하나요? 내가 알지 못하는 다른 기본 제공 방식을 사용하거나 개발자 안내서에서 제시 한대로해야 할 필요가있는 부분을 먼저 작성한 다음 고유 한 식별자를 생성해야합니다. autoinc
을 사용해야한다면 방금 테이블에 삽입 된 값을 어떻게 얻을 수 있습니까?
감사합니다 아주 많이 ! 나는 autoinc 및 LastAutoInc에 대해 발견 한 정보가 유효 기간이 지났다고 생각합니다. LastAutoInc을 CONNECTION 및 STATEMENT와 함께 사용했지만 동시성 문제가 해결되는지 여부에 대한 정보는 제공하지 않았습니다. LastAutoInc (STATEMENT)는 이제 내가 쫓고있는 것과 똑같은 소리가납니다. –