您好我想使用以下语句生成一个唯一随机数:
Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM]
因为当我在“from”上使用连接子句时,它会使用NEWID()生成双重寄存器
我使用的是SQL Server 2000
- PD:当我使用Rand()时,它可能会重复1次100,000的概率,但这是非常重要的,所以它必须是重复生成的随机值的概率的0%
我的带有NewID()的查询和SELECT语句的结果是重复的(x2)我的QUery没有NewID()并且在SELECT语句中使用Rand()是单个(x1)但是重复产生的随机值的概率是不确定的但 exists!
谢谢!
5 回答
它溢出了吗?
编辑:
没有0%重复次数的可能性
CHECKSUM(NEWID()))返回一个有40亿行的整数 . birthday paradox意味着碰撞的机会当然要高得多 .
Bigint(上图)或小数(38,0)为您提供了更多的空间,但只能减少碰撞的几率,但绝不会消除 .
但仍然不明白你为什么要尝试加入一个独特的随机数...
看这里:SQL Server - Set based random numbers
在SQL Server中,您可以使用它来生成随机数,或指定参数之间的随机整数
如果您正在使用MySQL
MySQL doc:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand
如果你正在使用Postgres
Postgres doc:http://www.postgresql.org/docs/8.0/static/functions-math.html
使用一位数字更新列