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)但重复生成的随机值的概率是不确定的但存在!
谢谢!
它溢出了吗?
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)为您提供了更多的空间,但只能减少碰撞的几率,但绝不会消除.
但仍然不明白你为什么要尝试加入一个独特的随机数...
| 归档时间: |
|
| 查看次数: |
17597 次 |
| 最近记录: |