存储过程以获取下一个渐进ID

伤疤

我不确定哪种方法是在我的应用程序中获取增量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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章