我有一个名为的表UniqueIDStore
,它给了我最后一次UniqueID
从数据库中给出的信息。当应用程序需要唯一 id 时,应用程序将执行以下存储过程并执行以下操作,
UniqueID
从UniqueIDStore
表中获取最后一个- 加一
- 将最新的保存
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
我不是 SQL Server 专家;有人可以帮我解决这个修复存储过程以同步请求吗?