确保独特的价值

时间:2010-07-23 11:43:32

标签: sql sql-server-2005 tsql

我有一个包含唯一值的表,一旦调用了存储过程,我在子查询中使用以下代码从表中获取随机值:

SELECT TOP 1 UniqueID FROM UniqueValues
WHERE InitiatingID is NULL
ORDER BY NewID() ASC
然而,我注意到我正在管理(并且我猜两个同时运行的调用导致它)两次检索相同的唯一值,这会导致程序中出现一些问题。

有没有办法(最好不锁定表格)使唯一值ID生成完全独特 - 或者足够独特,不会影响两个同时调用?作为一个注释,我需要保留唯一值,并且不能直接在这里使用GUID。

谢谢,

凯尔


编辑以澄清:

我在缓冲独特的价值观。这就是WHERE InitiatingID is NULL的全部意义所在。当从查询中挑选出一个值时,InitiateID已设置,因此在释放之前不能再次使用。问题是,在该过程设置InitiatingID的毫秒内,似乎该值再次被拾取,从而损害了该过程。

3 个答案:

答案 0 :(得分:1)

随机暗示您将随机两次获得相同的值。

为什么不使用IDENTITY列?

我在几天前写了一篇关于手动ID生成的博客文章here。也许这有帮助。

答案 1 :(得分:0)

您所做的并不是真正生成随机唯一值 - 如果您使用适当的例程,则生成重复项的可能性很小,但是从群体中随机选择一个项目 - 这取决于您的人口规模,重复发生的几率要高得多。事实上,如果给予足够的重复绘图,偶尔会有重复 - 如果没有,那就不会真正随机。

如果您想要的是永远不会连续绘制相同的唯一ID,您可以考虑在某处缓冲“旧”唯一ID,如果匹配(或运行WHERE <> currentlydrawuniqueID)则丢弃您的绘图。 / p>

答案 2 :(得分:0)