【发布时间】:2011-05-26 11:16:47
【问题描述】:
我创建了一个存储过程,它应该通过每次调用表中的值递增来返回一个唯一的数字。
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
有时存储过程会返回相同的数字两次。我做错了什么?
【问题讨论】:
-
您是否有多个进程/线程访问此过程?
-
您是在循环客户端还是在另一个 proc 中调用此 proc?
-
发生的频率是多少?
-
是的,该过程由可以在多个实例中运行的 C# 组件访问。但我认为当我在事务中运行 proc 时这并不重要。
标签: sql sql-server tsql stored-procedures