我正在尝试向用户提供一些独特的随机代码,但不会跳过范围内的任何数字。我的桌子就像这样
RandomCode | IsUsed | RNum
--------------------------
002 | Y | 1
004 | Y | 2
003 | NULL | 3
005 | Y | 4
001 | NULL | 5
所以下一个要使用的随机码应该是003然后是001.问题是用户可以返回代码,我应该将该号码给予someonelse。在那种情况下,我将IsUsed设置为NULL。
我尝试选择IsUsed列的最小Rnum为NULL。然后更新表。但是遇到了Race条件,用户得到了重复的RandomCode。
的任何帮助
更新表 SET IsUsed = N'Y' IsIsed = NULL和RNum = MIN(RNUM) RETURNING
答案 0 :(得分:2)
你在代码中犯了两个小错误:
您完成了IsUsed = NULL
。
此条件始终返回false。没有什么等于NULL
。请改用IsUsed IS NULL
。
您使用了RNum = MIN(RNum)
。请改用子查询。
以下是您使用这些简单修改的查询。
UPDATE TABLE
SET IsUsed = N'Y'
WHERE IsUsed IS NULL
and RNum = (SELECT MIN(RNum) FROM table WHERE IsUsed IS NULL)