您好,我想生成一个唯一的随机数,而不使用以下语句:
Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM]
因为当我在“from”上使用连接子句时,它通过使用 NEWID() 生成双寄存器
我使用 SQL Server 2000
*PD:当我使用 Rand() 时,它可能会以 100000000 的概率 1 重复,但这非常关键,因此重复生成的随机值的概率必须为 0%
我的 NewID() 查询和 SELECT 语句的结果重复 (x2)
我的 QUEry 没有 NewID() 并在 SELECT 语句上使用 Rand() 是单个 (x1),但重复生成的随机值的概率是不确定的,但是exists!
Thanks!
是不是满溢了?
CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) AS [ITEM]
CAST(CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) % 2100000000 AS int) AS [ITEM]
Edit:
不存在 0% 重复数字的可能性
CHECKSUM(NEWID())) 返回一个整数,包含 40 亿行。这生日悖论当然,这意味着碰撞的可能性要高得多。
Bigint(上图)或decimal(38,0)给你更多的发挥空间,但只会减少碰撞的机会,但永远不会消除。
但仍然不明白为什么你要尝试以唯一的随机数加入......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)