sql - T-SQL 存储过程从计数器多次获取相同的值

标签 sql sql-server tsql stored-procedures

我创建了一个存储过程,该过程应该通过每次调用时增加表中的值来返回唯一的数字。

ALTER PROCEDURE [dbo].[GetNextNumber] @Next_Number char(9) output AS
BEGIN
    BEGIN TRAN

    DECLARE @Current_Number int
    SET @Current_Number = (SELECT CONVERT(int, Counter) FROM CounterTable)

    IF(@Current_Number IS NULL)
    BEGIN
        SET @Next_Number = '000000000'
        INSERT INTO CounterTable (Counter) VALUES (@Next_Number)
    END
    ELSE IF(@Current_Number >= 999999999)
    BEGIN
         SET @Next_Number = '000000000'
         UPDATE dbo.CounterTable SET Counter = @Next_Number
    END
    ELSE
    BEGIN
        SET @Next_Number = REPLACE(STR(@Current_Number + 1, 9),' ', '0')
        UPDATE dbo.CounterTable SET Counter = @Next_Number
    END

    COMMIT TRAN
END

有时存储过程会返回相同的数字两次。我做错了什么?

最佳答案

我以前这样做过:

update CounterTable set @Next_Number = Counter = Counter + 1

将其保留在单个语句中,因此(除非您可能切换到“未提交的读取”)不应该对多个调用者产生问题。

关于sql - T-SQL 存储过程从计数器多次获取相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137624/

相关文章:

sql - 检查唯一性时我应该使用空字符串而不是 NULL 吗?

SQL 根据连接更新值

sql - 如何执行存储在 varchar 变量中的数学表达式

sql - 简单的 DELETE 语句不起作用

java - 是否有用于将谓词定义为类似 SQL 的字符串的 Java 库?

sql - 使用表变量或用户定义类型的 SQL 查询性能较差

sql-server - 无法加载 sqljdbc_auth.dll

sql - 连续计数记录结果

tsql - 如何在存储过程中进行错误处理

tsql - T-SQL VIEW - CTE + UNPIVOT 对比 UNION 对比其他技术