UniqueIDStore
データベースから最後に与えられたテーブルがUniqueID
あります。アプリケーションが一意のIDを必要とする場合、アプリケーションは次のストアドプロシージャを実行し、次のことを実行します。
- テーブル
UniqueID
から最後に取得UniqueIDStore
- 1つインクリメント
- 最新の
UniqueID
ものをUniqueIDStore
テーブルに保存します。
アプリケーションがさまざまなデータベース接続/Javaプロセスからこのストアドプロシージャを実行すると、重複した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
私はSQLServerの専門家ではありません。誰かがリクエストを同期するためのこの修正ストアドプロシージャについて私を助けてもらえますか?