sql - 在sql server中生成下一个序列号

标签 sql sql-server sequence

我需要生成一个序列号以用作主键(在遗留系统中)

我想知道以下解决方案在竞争条件下是否会遇到并发问题。

CREATE TABLE SequenceGenerator
(
    Sequence INT
)

INSERT INTO SequenceGenerator SELECT 0

这是存储过程,每当我需要下一个序列号时我都会调用它

CREATE PROCEDURE GetNextSequence
AS
    SET NOCOUNT ON
    DECLARE @NextSequence INT
    UPDATE SequenceGenerator SET
    @NextSequence = Sequence,
    Sequence = Sequence + 1
    RETURN @NextSequence + 1

谢谢

最佳答案

是的。

是否有某种原因无法使用身份字段(即:identity(1,1))来代替?

如果您想使用上面的代码,您当然应该将其包装在可序列化的事务中并处理任何死锁情况。

关于sql - 在sql server中生成下一个序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586527/

相关文章:

sql-server - 不适用于复制,SQL 不工作

java - ORA-02289 : sequence does not exist when upgrade Hibernate 3 to hibernate 4

r - 基于最小 5 个连续值的向量序列的子集数据帧

sql-server - Identity 值硬编码的 SQL 最佳实践

c# - 如何在C#中找到最长的颜色序列

mysql - 选择用户并按文章总浏览量对他们进行排序

mysql - 使用 sql if else 对表中的数据进行匿名化更简单

sql - 在 Oracle 中保持表同步

python - 字符串格式 : Iterate the row values from a csv file

sql-server - 在 Azure DevOps 管道上生成 SQL Server 架构更改脚本