我不确定哪种方法是在我的应用程序中获取增量ID的最佳实践(依靠SQL Server保留每个计数器)。在我的场景中,当分支需要一个新的ID时,它将调用我的存储过程,该过程将确保获得一个新的,增量的和唯一的ID。该ID不用作任何表的键,而是在应用程序的业务逻辑中使用(更像是令牌)。
EG:我读过“选择并随后进行更新”可能会导致dadlock(关于共享锁的某些问题)。我想在我的实际存储过程中避免它:
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;
我误会了什么?有正确的方法吗?
尝试使用SEQUENCE
,它正是针对该用例而设计的。
CREATE SEQUENCE [dbo].[MySequence]
START WITH 0
INCREMENT BY 1;
UPDATE [dbo].[NumberRange]
SET [Counter] = NEXT VALUE FOR [dbo].[MySequence]
WHERE [Item] = 'Customer';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句