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の専門家ではありません。誰かがリクエストを同期するためのこの修正ストアドプロシージャについて私を助けてもらえますか?