我有一个票务系统,我需要分发唯一的号码,总是分发最低的可用号码。这是“票证”表:
票证表包含100个可用号码。
我有一个存储过程,其中包含以下代码:
BEGIN TRANSACTION
SET @value = (SELECT MIN(Id) FROM Screens WHERE OtherId IS NULL)
WAITFOR DELAY '00:00:15'; --Only here for testing purposes
UPDATE
Screens
SET
OtherId = @OthererId
WHERE
Screens.Number = @value
COMMIT TRANSACTION
交易似乎没有做我所希望的。延迟时,我可以运行两次,第二次返回与第一次相同的值。我想确保每个值都是唯一的。我如何完成这个。
答案 0 :(得分:0)
我在" Begin Transaction"之后修改了第一行。到
SET @value = (SELECT MIN(Id) FROM Screens WITH (TABLOCKX, HOLDLOCK) WHERE OtherId IS NULL)