我不确定在我的应用程序中获取增量ID的最佳做法是什么(依赖SQL Server来保留每个计数器)。 在我的场景中,当应用程序需要一个新的ID时,它会调用我的存储过程,该过程保证获得一个新的,增量的和唯一的ID。 该ID不用作任何表的键,用于应用程序的业务逻辑(更像是令牌)。
EG:我已经读过,使用后续更新选择可能会导致发生故障(关于共享锁定)。 我想在我的实际存储过程中避免它:
declare @Current bigint, @Number bigint
BEGIN TRAN T1
select @Current = [Counter] from dbo.NumberRange where [Item] = 'Customer'
SET @Number = @Current + 1 ;
UPDATE [dbo].NumberRange
SET [Counter] = @Number
WHERE [Item] = 'Customer'
COMMIT TRAN T1
RETURN @Number;
我错过了什么?有没有正确的方法呢?
答案 0 :(得分:4)
尝试使用SEQUENCE
,它专为此用例设计。
CREATE SEQUENCE [dbo].[MySequence]
START WITH 0
INCREMENT BY 1;
UPDATE [dbo].[NumberRange]
SET [Counter] = NEXT VALUE FOR [dbo].[MySequence]
WHERE [Item] = 'Customer';