데이터베이스에서 주어진 UniqueID
이라는 테이블을 UniqueIDStore
라고합니다. 응용 프로그램이 고유 ID를 필요로 할 때, 테이블에서 다음 ID 값을 가져 오는 경우가 중복되는 경우가 있습니다.
- 지난
UniqueID
한 - 하여 테이블
- 증가
UniqueIDStore
에서 저장 최신UniqueID
UniqueIDStore
표를 얻으, 응용 프로그램은 저장 프로 시저를 다음 실행할 것이며, 그것은 다음과 같은 일을한다.
응용 프로그램이 다른 데이터베이스 연결/자바 프로세스에서이 저장 프로 시저를 실행하면, 그것은 나를 ID의 언젠가 중복 반환, 난 이유를 모르겠어.
UniqueIDStore
테이블 :
CREATE TABLE [dbo].[UniqueIDStore](
[UniqueId] [bigint] NOT NULL
) ON [PRIMARY]
저장 프로 시저는 다음과 같습니다
CREATE PROCEDURE [dbo].[GET_UniqueID] @blockSize int = 1
AS
DECLARE @uniqueId BIGINT;
DECLARE C1 CURSOR local FOR SELECT UNIQUEID FROM UniqueIDStore FOR UPDATE OF UNIQUEID;
OPEN C1;
SELECT UNIQUEID FROM UniqueIDStore;
FETCH C1 INTO @uniqueId;
UPDATE UniqueIDStore SET UNIQUEID = @uniqueId + @blockSize;
CLOSE C1;
GO
내가 SQL 서버 전문가가 아니다; 누군가가 요청을 동기화하는이 고정 저장 프로 시저에서 나를 도울 수 있습니까?
ID 열을 찾습니다. 2012 년에는 시퀀스를 볼 수도 있습니다. 이 아이디어에 머물렀다면 "select (select unique (UniqueIDStorage에서 최대 (UNIQUEID)) +1)"을 시도하십시오. – muhmud
내장 된 옵션 인 'IDENTITY' 대신 왜 이것을 사용 하시겠습니까? 나는 이것이 항상 작동하는 것을 보지 못합니다. 동시 요청, 트랜잭션 롤백, 잠재적으로 더러운 읽기 등과 같은 많은 요소가 있습니다. – Bridge
오라클 백그라운드에서오고 있습니까 (next-sequence (next val))? – granadaCoder