如何锁定一行以便select只返回一次行?

Oli*_*ter 1 sql t-sql database sql-server sql-server-2014

SQL业余爱好者.

我有一张包含优惠券代码的表格:

id  voucherCode  UserId
------------------------
1   abcde        13
2   bcdef        11
3   cdefg
4   defgh
Run Code Online (Sandbox Code Playgroud)

现在,如果我的一个用户有资格获得优惠券代码,我会从我的表中获得一个:

SELECT TOP 1 * FROM tableName WHERE UserId IS NULL;
UPDATE tableName SET UserId = @UserID WHERE id = @SelectedIdFromAboveSelect;
Run Code Online (Sandbox Code Playgroud)

我必须确保每行只选择一次.如果多个用户需要凭证代码,则SELECT和之间存在小的时间差UPDATE.如果然后SELECT执行第二次,则SELECT第二次可以是同一行.我该如何预防呢?

小智 7

我想你可以按相反的顺序做到; 我的意思是,你UPDATE用表用户ID,然后SELECT是voucherCode.这样你就不会有任何问题.