Quiero elegir aleatoriamente un valor de un pequeño rango de enteros (menos de 200). Como alternativa aCRYPT_GEN_RANDOM extraños efectos
SELECT RAND()
Estoy intentando utilizar
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT)/65535
pero yo estoy haciendo algunos efectos extraños.
Por ejemplo:
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;
yo esperaría que esta para volver exactamente una fila con los dos valores de las columnas iguales.
Sin embargo, devuelve cero, una o más filas, con valores de columna que solo ocasionalmente son iguales.
¿Alguna idea de lo que está pasando aquí?
¡Cambie el nombre como el gato de Schrödinger o el Principio de Incertidumbre en el Servidor SQL! hahah –
[Blogged acerca de esto aquí] (http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression). –