0

我试图为用户提供一种独特的随机代码,但不跳过范围内的任何数字。我的桌子是这样的

RandomCode | IsUsed | RNum
--------------------------
002        | Y      | 1
004        | Y      | 2
003        | NULL   | 3
005        | Y      | 4
001        | NULL   | 5

所以下一个要使用的随机码应该是 003,然后是 001。问题是用户可以返回代码,我应该把那个号码给别人。在这种情况下,我将 IsUsed 设置为 NULL。

我尝试将 IsUsed 列的最小 Rnum 选择为 NULL。然后更新表格。但是遇到了 Race 条件,用户得到了重复的 RandomCode。

任何帮助

UPDATE TABLE SET IsUsed = N'Y' WHERE IsUsed = NULL 并且 RNum = MIN(RNUM) 返回

4

1 回答 1

2

您在代码中犯了两个小错误:

  1. 你做到了IsUsed = NULL

    此条件始终返回 false。没有什么等同于NULL。改为使用IsUsed IS NULL

  2. 你用过RNum = MIN(RNum)。请改用子查询。

这是您对这些简单修改的​​查询。

UPDATE TABLE
SET IsUsed = N'Y'
WHERE IsUsed IS NULL
and RNum = (SELECT MIN(RNum) FROM table WHERE IsUsed IS NULL)
于 2013-04-06T07:59:40.347 回答