如何解决T-SQL存储过程多次从计数器获得相同的值
| 我创建了一个存储过程,该存储过程应该通过在每次调用表时增加表中的值来返回唯一数字。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
这样可以将其保存在单个语句中,因此(除非您可能切换为“读取未提交”),否则多个调用方都不会出现问题。
,您可以使用表格提示显式锁定ѭ2
...
SET @Current_Number = (
SELECT CONVERT(int,Counter)
FROM CounterTable WITH(Holdlock,Updlock)
)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。