不使用NewID的SQL上的随机数()

Jon*_*edo 7 sql t-sql sql-server random

您好我想使用以下语句生成一个唯一随机数:

Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM] 
Run Code Online (Sandbox Code Playgroud)

因为当我在"from"上使用连接子句时,它会使用NEWID()生成双重寄存器

我使用的是SQL Server 2000

*PD:当我使用Rand()时,它可能会重复1次100,000的概率,但这是非常重要的,所以它必须是重复生成的随机值的概率的0%

我的带有NewID()的查询和SELECT语句的结果是重复的(x2)我的QUery没有NewID()并且在SELECT语句中使用Rand()是单个(x1)但重复生成的随机值的概率是不确定的但存在!

谢谢!

gbn*_*gbn 9

它溢出了吗?

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]
Run Code Online (Sandbox Code Playgroud)

编辑:

没有0%重复次数的可能性

CHECKSUM(NEWID()))返回一个有40亿行的整数.在生日悖论意味着碰撞的机会当然要高得多.

Bigint(上图)或小数(38,0)为您提供了更多的空间,但只能减少碰撞的几率,但绝不会消除.

但仍然不明白你为什么要尝试加入一个独特的随机数...