【发布时间】:2010-12-30 18:55:22
【问题描述】:
我有一张包含数万条记录的表,其中包含预先生成的代码。我每次都会给一个用户一个随机选择的代码。我选择一个代码并立即将其更新为“已使用”。我的问题是每隔一段时间就有两个用户得到相同的代码。是否有保证不给两个用户提供相同代码的方法?
这是我选择和更新所选代码的方式:
SELECT TOP 1 @code = code FROM MyCodes WITH (NOLOCK) WHERE used = 0 and some other conditions
AND 0.01 >= CAST(CHECKSUM(NEWID(), code) & 0x7fffffff AS FLOAT) / CAST (0x7fffffff AS INT);
UPDATE MyCodes SET used = 1 WHERE code = @code;
【问题讨论】:
-
为什么要预先生成代码?在发生时生成并提供给用户。
-
您的随机选择不是从所有可用的未使用代码中统一选择的。这是故意的吗?
-
@Mark:我已经有这个条件了,只是忘了把它放在问题代码中抱歉。
标签: sql-server sql-server-2005 tsql