我有一个包含唯一值的表,一旦调用了存储过程,我在子查询中使用以下代码从表中获取随机值:
SELECT TOP 1 UniqueID FROM UniqueValues
WHERE InitiatingID is NULL
ORDER BY NewID() ASC
然而,我注意到我正在管理(并且我猜两个同时运行的调用导致它)两次检索相同的唯一值,这会导致程序中出现一些问题。
有没有办法(最好不锁定表格)使唯一值ID生成完全独特 - 或者足够独特,不会影响两个同时调用?作为一个注释,我需要保留唯一值,并且不能直接在这里使用GUID。
谢谢,
凯尔
我在缓冲独特的价值观。这就是WHERE InitiatingID is NULL
的全部意义所在。当从查询中挑选出一个值时,InitiateID已设置,因此在释放之前不能再次使用。问题是,在该过程设置InitiatingID
的毫秒内,似乎该值再次被拾取,从而损害了该过程。
答案 0 :(得分:1)
答案 1 :(得分:0)
您所做的并不是真正生成随机唯一值 - 如果您使用适当的例程,则生成重复项的可能性很小,但是从群体中随机选择一个项目 - 这取决于您的人口规模,重复发生的几率要高得多。事实上,如果给予足够的重复绘图,偶尔会有重复 - 如果没有,那就不会真正随机。
如果您想要的是永远不会连续绘制相同的唯一ID,您可以考虑在某处缓冲“旧”唯一ID,如果匹配(或运行WHERE <> currentlydrawuniqueID
)则丢弃您的绘图。 / p>
答案 2 :(得分:0)