您好,我想使用以下语句生成一个唯一随机数:
Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM]
因为当我在“from”上使用 joins 子句时,它会使用 NEWID() 生成双寄存器
我使用 SQL Server 2000
*PD:当我使用 Rand() 时,它可能以 100000000 的概率 1 重复,但这非常关键,因此重复生成的随机值的概率必须为 0%
我的 NewID() 查询和 SELECT 语句的结果重复 (x2)
我的查询没有 NewID() 并在 SELECT 语句上使用 Rand() 是单个 (x1) 但重复生成的随机值的概率不确定但 存在!
谢谢!
最佳答案
是不是溢出了?
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]
编辑:
没有重复数字的可能性为 0%
CHECKSUM(NEWID())) 返回一个整数,它有 40 亿行。 birthday paradox意味着碰撞的机会当然要高得多。
Bigint(上图)或decimal(38,0)给你更多的空间,但只会减少碰撞的机会,但永远不会消除。
但仍然不明白你为什么要加入一个唯一的随机数......
关于sql - 不使用 NewID() 的 SQL 上的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247554/