gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:45:26 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com