存储过程事务

时间:2017-05-01 18:04:52

标签: sql-server stored-procedures

我有一个票务系统,我需要分发唯一的号码,总是分发最低的可用号码。这是“票证”表:

  • Id - PK,int
  • OtherId - int,nullable

票证表包含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

交易似乎没有做我所希望的。延迟时,我可以运行两次,第二次返回与第一次相同的值。我想确保每个值都是唯一的。我如何完成这个。

1 个答案:

答案 0 :(得分:0)

我在" Begin Transaction"之后修改了第一行。到

SET @value = (SELECT MIN(Id) FROM Screens  WITH (TABLOCKX, HOLDLOCK) WHERE OtherId IS NULL)
相关问题