【发布时间】:2011-04-15 14:43:06
【问题描述】:
我想从一小部分整数(小于 200)中随机选择一个值。作为
的替代品SELECT RAND()
我正在尝试使用
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT) / 65535
但我得到了一些奇怪的效果。
例如:
WITH Numbers (num)
AS
(
SELECT num
FROM (
VALUES (1), (2), (3), (4),
(5), (6), (7), (8),
(9), (10)
) AS Numbers (num)
),
RandomNumber (num)
AS
(
SELECT CAST(
(CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT) / 65535)
* (SELECT COUNT(*) FROM Numbers) + 1
AS INTEGER
)
)
SELECT T1.num, R1.num
FROM Numbers AS T1
INNER JOIN RandomNumber AS R1
ON T1.num = R1.num;
我希望这能准确返回一行,两列值相等。
但是,它返回零、一行或多行,列值只是偶尔相等。
知道这里发生了什么吗?
【问题讨论】:
-
重命名为薛定谔猫或Sql Server中的不确定性原理!哈哈
标签: sql sql-server tsql sql-server-2008 random